
sd卡工作原理分析完整版.docx
19页sd 卡工作原理分析一 CPU相关,ssio的连接和设置 21 硬件初始化, ssio 的相关配置 21) 端口功能选择寄存 ——GPCTL 22) 端口模式寄存器——GPPMA,GPPMB,GPPMC,GPPMD,GPPME 23) 同步SIO控制寄存器——SSIOCON 34) 同步SIO状态寄存器——SSIOST 35) 同步SSIO测试控制寄存器——SSIOTSCON 46) 同步SIO收发缓冲寄存器——SSIOBUF 57) 同步SIO中断申请寄存器——SSIOINT 58) 同步SIO中断使能寄存器——SSIOINTEN 52 CPLD 片选 63第三步,ssio收发字符相关 6二 数据包的封装与命令协议相关 61 sd 卡指令数据包 62 sd 卡命令索引表 73 命令回应 repond 101) R1 模式 102) R2 模式 113) R3 模式 11三 命令的控制与实现 121 程序中调用的 sd 卡命令 121) 命令响应函数 UCS_DRSD_niCommandRespond 122) sd 卡驱动程序初始化——UCS_DRSD_giSdIdentify 133) 读sd卡操作函数 154) 写sd卡操作函数 15四 sd 卡的配置信息和相关结构体 161 卡识别寄存 CID(card identification register ) 162 卡特性寄存器 CSD(card specific data register) 17一 CPU 相关, ssio 的连接和设置1 硬件初始化, ssio 的相关配置1)端口功能选择寄存器——GPCTL地址:0XB7000000功能描述:这个寄存器配置各组GPI0的管教原始功能或者第二功能;CPU可 以对这个寄存器进行读/写访问;复位后的默认值是0X0000。
GPCTLAt reset_*15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0这里对这个寄存器有两处操作① 首先将此寄存器和〜0x0008与,来操作GPPMB;GPCTL3(bi⑶位控制管脚PIOB[4]和PIOB[1: 0]的功能,设置如下:GPCTL3 = “0”(原始功能)GPCTL3 = T”(第二功能)FunctionIn/OutFunctionIn/OutPIOB[0]In/OutDREQ0InputPIOB[1]In/OutDREQCLR0OutputPIOB[4]In/OutTCOUT0Output② 然后将此寄存器和0x0100或,来操作GPPME GPCTL9(bit9)位控制管脚的功能,它的第二功能是ssioGPCTL9 = “0”(原始功能)GPCTL9 = T”(第二功能)FunctionIn/OutFunctionIn/OutPIOE[3]In/OutSDAIn/OutPIOE[4]In/OutSCLOutput2) 端口模式寄存器——GPPMA,GPPMB,GPPMC,GPPMD,GPPME 地址: 0xB7A01008〜0xB7A01088功能描述:这些寄存器指定相应管脚的I/O流向(PIOA[7:0], PI0B[7:0],PI0C[7:0], PIOD[7:0] and PIOE[9:0]); CPU可以对这个寄存器进行读/写访问;复位后的默 认值是0x0000。
GPPMA[7:0]/GPPMB[7:0]/ GPPMC[7:0]/GPPMD[7:0] (bits 0 to 7)/GPPME[9:0] (bits 0 to 9):,这些位置0时表示input;置1时表示output15〜10 9 8 7 6 5 4 3 2 1 0_*_*_*_GPPMA[7:0]/GPPMB[7:0]/GPPMC[7:0]/GPPMD[7:0]/GPPME[9:0],GPPME uses bit9 & bit8.For other GPPMx, bit9 & bit8 are “-*”.At reset 0 0 0 0 0 0 0 0 0 0这里对寄存器GPPMB和0x0002,将PIOB[2 ]作为输出,作用是CPLD的片选对寄存器GPPME先后进行了三步操作:① 首先将寄存器和 0x0001 或将PIOE[0]作为输出,该管脚输出时钟clock② 再次将寄存器和 0xfffd 与将PIOE⑴作为输入,该管脚为SDI,即卩SD卡的输入③ 最后将寄存器和 0x0004 或将PIOE[4]作为输出,该管脚为SDO,即SD卡的输出3)同步SIO控制寄存器——SSIOCON地址: 0xB7B01010功能描述:SSIOCON寄存器用来控制收发操作。
这个寄存器可以通过程序来进 行读或者写如果SSIOCO N寄存器被修改,那么变化会在收发操作结束后生 效如果SSIOCO N在传送过程中被修改,那么当前的操作将不能正确的执行76543210SSIOCON_*_*SLMSBSFTSLV_*_*SFTCLK [1:0]At reset00000000注意: -*是保留位,这些位总是被写 0,如果这些位被写 1,正常操作无法被保 证位说明:① SFTCLK [1:0] (bit 1 to bit 0)这两位选择同步时钟,操作必须在主模式(master mode )下,从模式(slave mode) 被禁止bit[1:0]] = 00 时, 1/8 HCLK;bit[1:0]] = 01 时, 1/16 HCLKbit[1:0]] = 1x 时, 1/32 HCLK② SFTSLV (bit 4) 这位用来选择主从模式 bit[4] = 0 时, Master mode bit[4] = 1 时, Slave mode③ SLMSB (bit 5)这位用来选择在收发数据过程中最低有效位在前(LSB first)还最高有效位在前(MSB first)bit[5] = 0 时, LSB firstbit[5] = 1 时, MSB first这里将其存器设置成0x22,选择了主模式Masterl最高有效位在前 MSB|1/32HCLK。
4)同步SIO状态寄存器——SSIOST地址: 0xB7B01004功能描述:SSIOST寄存器指示同步SI0的操作状态,通过程序可以读写OERR 和BUSY寄存器的SFTCT[2: 0]位是只读的,写这些位无效,当写这些位是, 将写076543210SSIOSTSFTCT [2:0]_*_*_*OERRBUSYAt reset00000000注意: -*位是保留位,总是向这些位写0,如果写1,正常德操作将无法保证 位说明:① BUSY (bit 0) 这位指示数据正在被收发,这位在数据收发时自动置1,操作完成时自动清0 当置1时,意味着数据正在被传送,在传送的过程中写0,可能会终止收发操作 并且重新初始化SSIO如果在空闲时写0,操作是无效的当 bit[0] = 0, Transmit-receive idle当 bit[0] = 1, Transmit-receive in progress② 0ERR (bit 1)这位指示overrun错误是否发生如果当前接收的数据没有被读,CPU该位置1 一旦被置1,这位不会清0,即使在下一个接受操作中没有overrun错误发生因 此有必要在程序中清0,写0该位被清0,但写1也被置1。
当 bit[1] = 0, No overrun error 当 bit[1] = 1 , 0verrun error③ SFTCT[2:0] (bit 7 to bit 5)这个位指示 3 位移位计数器的当收发时的计数值当没有数据收发时计数器被 设置成 000(二进制)每次收发数据时有移位,计数器增 1当收发操作结束时 或者BUSY位在接收数据过程中写0时,寄存器返回000这里这个寄存器被写0x00清除状态5)同步SSIO测试控制寄存器——SSIOTSCON 地址: 0xB7B01014功能描述:SSIOTSCON是一个可以设计简单的同步SIO内部测试的寄存器,寄 存器可以有程序读写在普通操作中,设置SSIOTSCO N为0x00,收发数据时不 覆盖此寄存器的内容7 6 5 4 3 2 1 0SSIOTSCONLBTST*******At reset00000000注意: -*位是保留位,这些位总是写0,如果写1,正常的操作无法保证 位说明:LBTST (bit 7)这个位使能循环回侧函数,当循环回侧函数使能时,发送信号作为接收信号被 读回当 bit[7] = 0, Loop back test function disabled (normal mode)当 bit[7] = 1, Loop back test function enabled (test mode)这里这个寄存器被写0x80,循环回侧函数使能,进行虚拟发送数据Oxff并接 收。
6) 同步SIO收发缓冲寄存器——SSIOBUF地址:0xB7B01000功能描述:SSIOBUF寄存器在收发操作过程中保存收发的数据,寄存器可以通 过程序读/写当写时,寄存器作为发送缓冲区;读时,寄存器作为接收缓冲 区当接收SSIOBUF的内容时,数据保存直到下次接收操作完成转换并行发 送数据为串行数据和转换串行接收数据为并行数据时SSIOREG寄存器被配置成 移位寄存器在发送操作中,发送数据写到SSIOBUF中,SSIOBUF中的数据自 动传送给SSIOREG在接收操作中,当接收完最后一位时,SSIOREG数据传送 给SSIOBUF寄存器SSIOREG不能在程序中读/写7) 同步SIO中断申请寄存器——SSIOINT地址:0xB7B01008功能描述:SSIOINT寄存器设定一个同步SIO中断请求,可以通过程序读写寄存 器,向一位写1来清除该位7 6 5 4 3 2 1 0SSIOINT_*_*_*_*_*TREMPRXCMPTXCMPAt reset00000000注意: -*作为保留位,这些位总是写0,如果这些位被写1,正常德操作无法保 证位说明:① TXCMP (bit 0)当发送完成时这位被设置。
当 bit[O] = 0, Transmission not complete当 bit[1] = 1, Transmission complete② RXCMP (bit 1) 当接收完成时这位被设置当 bit[1] = 0, Reception not complete当 bit[1] = 1, Reception complete③ TREMP (bit 2)当收发缓冲区寄存器的数。
