⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mmc_sd.txt

📁 mp3量不要让站长把时间都花费在为您修正说明上。压缩包解压时不能有密码。系统会自动删除debug和release目录
💻 TXT
📖 第 1 页 / 共 4 页
字号:
000274  e5901004          LDR      r1,[r0,#4]
000278  e3c110f4          BIC      r1,r1,#0xf4
00027c  e5801004          STR      r1,[r0,#4]
;;;187    	PINSEL1 |=  (0x02 << 2) + (0x02 << 4) + (0x02 << 6);
000280  e5901004          LDR      r1,[r0,#4]
000284  e38110a8          ORR      r1,r1,#0xa8
000288  e5801004          STR      r1,[r0,#4]
;;;188    	
;;;189    	SSPCR0 = (0x00 << 8) |              			// SCR=0  
00028c  e3a00007          MOV      r0,#7
000290  e2886701          ADD      r6,r8,#0x40000
000294  e5860000          STR      r0,[r6,#0]
;;;190                (0x00 << 7) |             				// CPHA =0时钟输出相位,仅SPI模式有效 
;;;191                (0x00 << 6) |              				// CPOL =0时钟输出极性,仅SPI模式有效
;;;192                (0x00 << 4) |              				// FRF =00 帧格式 00=SPI,01=SSI,10=Microwire,11=保留
;;;193                (0x07 << 0);               				// DSS  数据长度,0000-0010=保留,0011=4位,0111=8位,1111=16位
;;;194    
;;;195        SSPCR1 = (0x00 << 3) |              			// SOD  从机输出禁能,1=禁止,0=允许
000298  e3a00002          MOV      r0,#2
00029c  e5860004          STR      r0,[r6,#4]
;;;196                (0x00 << 2) |              				// MS   主从选择,0=主机,1=从机
;;;197                (0x01 << 1) |              				// SSE  SSP使能,1=允许SSP与其它设备通信
;;;198                (0x00 << 0);               				// LBM  回写模式
;;;199    
;;;200    	SSPIMSC	= 0x00;								    // 取消所有中断使能		
0002a0  e3a07000          MOV      r7,#0
0002a4  e5867014          STR      r7,[r6,#0x14]
;;;201    	SSPICR	= 0x00;                     			// 中断清除寄存器
0002a8  e5867020          STR      r7,[r6,#0x20]
0002ac  e3a00080          MOV      r0,#0x80
0002b0  e5860010          STR      r0,[r6,#0x10]
;;;202    
;;;203    			 
;;;204    	/* set SPI clock speed */
;;;205    	SPI_Low();
;;;206    	_delay_ms(100);
0002b4  e3a00064          MOV      r0,#0x64
0002b8  ebfffffe          BL       soft_delay_ms
                  |L1.700|
;;;207    	do
;;;208    	{
;;;209    		for(i=0;i<40;i++) SPI_WriteByte(0xff);
0002bc  e3a02000          MOV      r2,#0
                  |L1.704|
0002c0  e3a000ff          MOV      r0,#0xff
0002c4  ebfffffe          BL       SPI_WriteByte
0002c8  e2820001          ADD      r0,r2,#1
0002cc  e20020ff          AND      r2,r0,#0xff
0002d0  e3520028          CMP      r2,#0x28
0002d4  3afffff9          BCC      |L1.704|
;;;210    		r1 = MMC_SD_SendCommandCRC(0, 0, 0x95);/*send idle command*/
0002d8  e3a01000          MOV      r1,#0
0002dc  e3a02095          MOV      r2,#0x95
0002e0  e1a00001          MOV      r0,r1
0002e4  ebfffffe          BL       MMC_SD_SendCommandCRC
;;;211    		retry++;
0002e8  e2841001          ADD      r1,r4,#1
0002ec  e3c14801          BIC      r4,r1,#0x10000
;;;212    		if(retry>CMD_TIMOUT) return 1;/*time out*/
0002f0  e3540d7d          CMP      r4,#0x1f40
0002f4  8a000097          BHI      |L1.1368|
;;;213    	} while(r1 != 0x01);	
0002f8  e3500001          CMP      r0,#1
0002fc  1affffee          BNE      |L1.700|
;;;214    
;;;215    	
;;;216    	r1 = MMC_SD_SendCommandCRC_NoDeassert(8, 0x1aa, 0x87);/*check version*/
000300  e59f1264          LDR      r1,|L1.1388|
000304  e3a02087          MOV      r2,#0x87
000308  e3a00008          MOV      r0,#8
00030c  ebfffffe          BL       MMC_SD_SendCommandCRC_NoDeassert
000310  e59f5258          LDR      r5,|L1.1392|
;;;217    	
;;;218    	if(r1 == 0x05) /*version 1*/  /*if it is version 2, then it will return invalid command, that is bit 2*/
000314  e3500005          CMP      r0,#5
000318  e3a09004          MOV      r9,#4                 ;216
00031c  1a000043          BNE      |L1.1072|
;;;219    	{
;;;220    		
;;;221    		SPI_CS_Deassert;
000320  e5980004          LDR      r0,[r8,#4]
000324  e3800602          ORR      r0,r0,#0x200000
000328  e5880004          STR      r0,[r8,#4]
;;;222    		SPI_WriteByte(0xff);				/* extra 8 CLK */
00032c  e3a000ff          MOV      r0,#0xff
000330  ebfffffe          BL       SPI_WriteByte
;;;223    		SPI_WriteByte(0xff);	
000334  e3a000ff          MOV      r0,#0xff
000338  ebfffffe          BL       SPI_WriteByte
;;;224    		
;;;225    		
;;;226    		printf_P(PSTR("\r\nVersion 1"));
00033c  e28f0e23          ADR      r0,|L1.1396|
000340  ebfffffe          BL       __1printf
;;;227    
;;;228    		retry = 0;
000344  e3a04000          MOV      r4,#0
                  |L1.840|
;;;229    		do
;;;230    		{
;;;231    			r1 = MMC_SD_SendCommandCRC(55, 0, 0);
000348  e3a02000          MOV      r2,#0
00034c  e1a01002          MOV      r1,r2
000350  e3a00037          MOV      r0,#0x37
000354  ebfffffe          BL       MMC_SD_SendCommandCRC
;;;232    			if(r1!=0x01)
000358  e3500001          CMP      r0,#1
00035c  e1a08000          MOV      r8,r0                 ;231
000360  0a000005          BEQ      |L1.892|
;;;233    			{
;;;234    				printf_P(PSTR("\r\n CMD55 r1=%x "),r1);
000364  e1a01008          MOV      r1,r8
000368  e28f0e21          ADR      r0,|L1.1408|
00036c  ebfffffe          BL       __1printf
;;;235    				return r1;
000370  e1a00008          MOV      r0,r8
                  |L1.884|
000374  e8bd4ff8          POP      {r3-r11,lr}
;;;236    			}
;;;237    			retry ++;
;;;238    			r1 = MMC_SD_SendCommandCRC(41, 0, 0);
;;;239    
;;;240    		}while((r1!=0)&&(retry<CMD_TIMOUT));
;;;241    
;;;242    		if (retry==CMD_TIMOUT) /*then it should be MMC card:   note: not tested! */
;;;243    		{
;;;244    			printf_P(PSTR("\r\nTake it as MMC card "));
;;;245    			retry = 0;
;;;246    			do
;;;247    			{
;;;248    				r1 = MMC_SD_SendCommand(1, 0);/*send active command*/
;;;249    				retry++;
;;;250    				if(retry>CMD_TIMOUT)
;;;251    				{
;;;252    					printf_P(PSTR("\r\n Time out "));
;;;253    					return 1;/*time out*/
;;;254    				}
;;;255    			} while(r1);
;;;256    		}	
;;;257    		
;;;258    		SPI_High();		/* Use High Speed SPI*/
;;;259    		_delay_ms(1000);
;;;260    #if 1
;;;261    		r1 = MMC_SD_SendCommand(59, 0);/*disable CRC*/	
;;;262    		if(r1 != 0)
;;;263    		{
;;;264    			printf_P(PSTR("\r\nDisabel CRC error"));
;;;265    			return r1;
;;;266    		}
;;;267    
;;;268    		r1 = MMC_SD_SendCommand(16, 512);/*set sector size to 512*/
;;;269    		if(r1 != 0)
;;;270    		{
;;;271    			printf_P(PSTR("\r\nSet sector size error"));
;;;272    			return r1;
;;;273    		}
;;;274    #endif
;;;275    		address_mode = BYTE_MODE;
;;;276    	}
;;;277    	
;;;278    	else if(r1 == 0x01)/*version 2*/  /*it only return idle*/
;;;279    	{
;;;280    		for(i=0;i<3;i++){buffer[i]=SPI_WriteByte(0xff);printf("%x ",buffer[i]);}
;;;281    		//if(buffer[2]!=0xaa || ((buffer[1]&0xf)!=0x01))
;;;282    		//{
;;;283    		//	printf_P(PSTR("\r\n pattern error"));
;;;284    		//	goto exit1;
;;;285    		//}
;;;286    
;;;287    		SPI_CS_Deassert;
;;;288    		SPI_WriteByte(0xff);				/* extra 8 CLK */
;;;289    
;;;290    		printf_P(PSTR("\r\nVersion 2"));
;;;291    
;;;292    		retry = 0;
;;;293    		do
;;;294    		{
;;;295    			r1 = MMC_SD_SendCommandCRC(55, 0, 0);
;;;296    			if(r1!=0x01)
;;;297    			{
;;;298    				//printf_P(PSTR("\r\n CMD55 r1=%x "),r1);
;;;299    				return r1;
;;;300    			}
;;;301    
;;;302    			r1 = MMC_SD_SendCommandCRC(41, 0x40000000, 0);
;;;303    
;;;304    		}while(r1!=0);
;;;305    
;;;306    		if(MMC_SD_SendCommandCRC_NoDeassert(58, 0, 0)!=0x00)goto exit1; /*read OCR*/
;;;307    		for(i=0;i<4;i++)buffer[i]=SPI_WriteByte(0xff);
;;;308    
;;;309    		if(buffer[0]&(1<<6))
;;;310    			address_mode = BLOCK_MODE;
;;;311    		else
;;;312    			address_mode = BYTE_MODE;
;;;313    		
;;;314    		SPI_CS_Deassert;
;;;315    		SPI_WriteByte(0xff);				/* extra 8 CLK */
;;;316    
;;;317    
;;;318    		SPI_High();		/* Use High Speed SPI*/
;;;319    
;;;320    	}
;;;321    	else
;;;322    	{
;;;323    		printf_P(PSTR("\r\nnot supported card"));
;;;324    	}
;;;325    
;;;326    
;;;327    	printf_P(PSTR("\r\naddress mode = %d"),address_mode);
;;;328    
;;;329    
;;;330    	return 0; /*normal return*/
;;;331    	exit1:
;;;332    		printf_P(PSTR("\r\nexit 1  r1=%x "),r1);
;;;333    
;;;334    		SPI_CS_Deassert;
;;;335    		SPI_WriteByte(0xff);				/* extra 8 CLK */
;;;336    		return 1;	
;;;337    }
000378  e12fff1e          BX       lr
                  |L1.892|
00037c  e2840001          ADD      r0,r4,#1              ;237
000380  e3c04801          BIC      r4,r0,#0x10000        ;237
000384  e3a02000          MOV      r2,#0                 ;238
000388  e1a01002          MOV      r1,r2                 ;238
00038c  e3a00029          MOV      r0,#0x29              ;238
000390  ebfffffe          BL       MMC_SD_SendCommandCRC
000394  e3500000          CMP      r0,#0                 ;240
000398  13540d7d          CMPNE    r4,#0x1f40            ;240
00039c  3affffe9          BCC      |L1.840|
0003a0  e3540d7d          CMP      r4,#0x1f40            ;242
0003a4  1a00000e          BNE      |L1.996|
0003a8  e28f0e1e          ADR      r0,|L1.1424|
0003ac  ebfffffe          BL       __1printf
0003b0  e3a04000          MOV      r4,#0                 ;245
                  |L1.948|
0003b4  e3a01000          MOV      r1,#0                 ;248
0003b8  e3a00001          MOV      r0,#1                 ;248
0003bc  ebfffffe          BL       MMC_SD_SendCommand
0003c0  e2841001          ADD      r1,r4,#1              ;249
0003c4  e3c14801          BIC      r4,r1,#0x10000        ;249
0003c8  e3540d7d          CMP      r4,#0x1f40            ;250
0003cc  9a000002          BLS      |L1.988|
0003d0  e28f0e1d          ADR      r0,|L1.1448|
0003d4  ebfffffe          BL       __1printf
0003d8  ea00005e          B        |L1.1368|
                  |L1.988|
0003dc  e3500000          CMP      r0,#0                 ;255
0003e0  1afffff3          BNE      |L1.948|
                  |L1.996|
0003e4  e5869010          STR      r9,[r6,#0x10]         ;255
0003e8  e3a00ffa          MOV      r0,#0x3e8             ;259
0003ec  ebfffffe          BL       soft_delay_ms
0003f0  e3a01000          MOV      r1,#0                 ;261
0003f4  e3a0003b          MOV      r0,#0x3b              ;261
0003f8  ebfffffe          BL       MMC_SD_SendCommand
0003fc  e1b04000          MOVS     r4,r0                 ;261
000400  128f0e1b          ADRNE    r0,|L1.1464|
000404  1a000006          BNE      |L1.1060|
000408  e3a01c02          MOV      r1,#0x200             ;268
00040c  e3a00010          MOV      r0,#0x10              ;268
000410  ebfffffe          BL       MMC_SD_SendCommand
000414  e1b04000          MOVS     r4,r0                 ;268
000418  05c57000          STRBEQ   r7,[r5,#0]            ;275  ; address_mode
00041c  0a000040          BEQ      |L1.1316|
000420  e28f0f69          ADR      r0,|L1.1484|
                  |L1.1060|
000424  ebfffffe          BL       __1printf
000428  e1a00004          MOV      r0,r4                 ;272
00042c  eaffffd0          B        |L1.884|
                  |L1.1072|
000430  e3500001          CMP      r0,#1                 ;278
000434  1a000038          BNE      |L1.1308|
000438  e3a04000          MOV      r4,#0                 ;280
00043c  e28da000          ADD      r10,sp,#0             ;280
                  |L1.1088|
000440  e3a000ff          MOV      r0,#0xff              ;280
000444  ebfffffe          BL       SPI_WriteByte
000448  e7ca0004          STRB     r0,[r10,r4]           ;280
00044c  e7da1004          LDRB     r1,[r10,r4]           ;280
000450  e28f0f4d          ADR      r0,|L1.1420|
000454  ebfffffe          BL       __1printf

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -