ABB CI851K01/PM861AK01
SD存储卡接口定义了两种通信模式,SD模式和SPI模式。分析了SD传输协议后,给出了一种SD模式设备接口的设计方案。该设计能够自动解析主机发送的命令并响应,与Flash控制器相连后可以对Flash进行读写操作。为了解决数据存取的时序问题,使用了数据缓存技术。FPGA验证表明,该接口能够被电脑识别为SD卡,达到了设计目标。
1引言
SD卡(SecureDigitalCard)是“安全数码存储卡”的简称,于1999年8月由美国SanDisk公司、日本东芝和松下公司共同开发研制成功。随着数码产品的广泛使用,目前SD卡已经成为消费数码产品设备中最广泛的一种存储卡。在手机中,大量的安全增值业务设计就是通过SD接口实现的。SD物理层规范定义了两种可选择的通信协议:SD模式和SPI模式。
本文在研究了SD物理层规范的基础上,实现SD设备接口SD模式的前端设计,并进行了FPGA原型验证。
2SD存储卡接口SD模式介绍的书写规则
SD卡与控制器之间通过以下9线连接:时钟CLK、命令CMD、数据D0~D3、电源VDD和两根地线VSS。其总线拓扑结构如图1所示。命令和响应在CMD线上传输,数据在D0(标准总线模式)或D0~D3(宽总线模式)线上传输。
SD卡的所有命令都是6字节长度。一个命令总是以起始位(0)开始,后跟传输方向位(1),接下是6位命令索引,然后是32位命令参数,CRC7校验位,结束位(1)。SD的响应分为R1、R1b、R2、R3、R6、R7六种,其中R1、R1b、R3、R6、R7为6字节长度。R2为17字节长度,用于读取SD卡的CID/CSD寄存器内容。一个响应总是以起始位(0)开始,后跟一个传输方向位(0)。除了R3响应类型,所有的响应都有CRC保护。以一个结束位(1)结束。SD数据传输以块为单位,每个块总是由数据起始位(0)、数据位、CRC16校验位和数据结束位(1)组成。
图1SD卡SD模式的总线拓扑结构
3整体设计架构
本设计的一端为SD存储卡标准接口,与读卡器连接。为了使接口有通用性,另一端与Flash控制器连接,从而达到与不同型号Flash连接的目的。本设计是连接读卡器和Flash控制器的一个中间模块。能够对读卡器发送的命令进行解析并响应,通过Flash控制器对Flash进行读写操作。整体设计方案如图2所示。
图2设计方案
4结构设计
根据SD接口功能,将其进行详细的划分,由以下几个部分组成:命令收发模块,数据收发模块,状态控制模块和校验模块。SD模块结构如图3所示。
4.1命令收发模块
该模块的结构如图4所示。命令接收与响应发送都是在命令线CMD上传输的,所以该端口为一个三态门,由输出使能信号En控制是否输出。命令接收时,首先检测命令起始位,检测到起始位后计数器开始工作。当接收完一个完整命令,发出接收完成信号End,分别得到移位寄存器中对应的命令索引,命令参数,命令校验。命令接收过程中,同时将数据传给CRC7校验模块,用于生成校验数据。响应发送时,模块根据状态控制模块给出的响应类型产生对应的响应内容,当接收到发送使能信号Start后,给出发送使能信号En,并将响应的内容通过移位寄存器发送出去。响应内容发送完成后给出响应完成信号Rsp_over。
图3模块结构
图4命令接收与响应模块
4.2数据收发模块
该模块的结构如图5所示。数据线也是双向的。Width信号指明当前数据传输模式为标准总线模式或宽总线模式。Size信号指示每个数据块包含的字节数。该模块包含两个数据缓冲,接收缓冲RxFIFO和发送缓冲TrFIFO,数据缓冲位宽16比特,深度为256,这是因为数据块最大为512字节。数据接收状态时,首先检测数据起始位,检测到起始位后计数器开始工作。接收Size个字节的数据后,接收CRC16校验位,最后完成数据块接收,发出接收完成信号End。数据接收过程中,每接收16位数据给出写入信号Wr,将数据写入RxFIFO。如果RxFIFO满,给出Busy信号,主机进入数据发送等待。数据发送状态时,接收控制器收到Start信号后,开始发出Rd信号读取TrFIFO数据,并将数据传给移位寄存器,使能数据输出控制信号Out_en,移位寄存器根据数据传输模式将数据输出。
图5数据收发模块
4.3状态控制模块
根据接收模块传送的命令编号产生与之对应的命令响应类型,进一步解析接收模块传送的命令参数。工作过程共有9个状态,状态间的转移关系如图6所示。接收到CMD0命令后都会从其它状态进入到空闲状态。
图6状态转移
4.4校验模块
CRC7负责校验命令收发模块中的命令和响应;CRC16负责校验数据收发模块中的数据。
5验证与测试
开发测试平台使用的是Altera的CycloneII系列FPGA开发板。开发板上有一个SD接口。测试平台的实物如图7所示。开发板可以通过一个PCB板SD接口与电脑SD接口连接,利用电脑对设计进行验证。
图7测试平台
在硬件调试过程中,采用内嵌式逻辑分析仪(SignalTapII)来采集相应的数据波形。图8是采集到的识别SD卡命令与响应波形图。从图中可以看出,该设计可以正确响应主机命令,完成识别过程。
图9中虚线所圈是将设计下载到FPGA开发板,与电脑相连接后被识别为SD存储卡标记,可以看出该设计可以被电脑正确识别。
6结束语
本文实现了一种SD存储卡接口SD模式IP核的设计与实现。该设计能够对主机命令进行自动解析和回复,与Flash控制器连接后可以直接对Flash进行读写操作。对该设计进行FPGA功能验证,能够被电脑识别为SD接口,从而说明的设计的正确性和实用性。利用SYNOPSYS公司的EDA工具对该模块进行综合,并进行时序和面积的优化,在SMIC0。18μm工艺下最大工作频率为100MHz,整个设计综合后为0.6万门。
SGDR-AXA01A
1756-CNB
1756-L61
GWK-AI1161000-010 替代型号 US2:1161000-010
GWK-AI2020164-001 替代型号 US2:2020164-001
GWK-AI2020169-001 替代型号 US2:2020169-001
140CRP81100
CACR-SR15BE12G-E
ATV61HC22N4
608701018
1756-L61
MSK061C-0600-NN-M1-UGO-NNNN
IK-CU44
GOULD TA240
LA9-B102
NXPP-02C
STUBBEETLB32-125
6SE6440-2UD17-5AA1
1000BASE-LX
X250E-24T L3 SWITCH
1766-L32BWAA
1756-CNB/E
1757-SRM/B
1746-P4
1785-L30B
770-XYC
1746-P2
1746-P4
1747-L542
1770-XYC
1785-L30B/E
VM3611T
57C422B
1746-IB32
1746-N18
1746-OW16
1747-L551
JWS75-15
2711P-T10C4D8
6ES7 331-7KF02-0AB0
6ES7 332-5HF00-0AB0
A06B-6130-H002
1784-PKTX
FAS-PCI8000
PCL6045BL
6AV6545-OBA15-2AXO
44DA001
IC693MDL753
IC693PWR321
NFEZQ8
82335-60001
BL 450/A(K2-400)
MR-SA22
MR-SA52
TC110
XFR600-4
140CPS11420
140CPS12400
RCM470LY
LFL1.322
SC902-001-01
44DA001
IC697BEM731
IC697BEM733
FHA-40C-100-E250
HA-675-4-200
A86L-0001-0125
N860-3117-T010
CACR-SR15BB1BF
DPS-400AB
F3LC12-1F
140ACI04000
140ARI03010
140CRP93200
140NOE77101
140XBE10000
1DDN0143 BRC400
IMASI23
INICT13A
MZ-15/EC
E4809-436-016-D
PCI-5565PIORC-110000
FC-280SAV
MD-420-00-000
CKK20-145
HC-KFS23
HC-SFS502
6ES7 414-3EM06-0AB0
RON905-36000
SYS68K/CPU-40B/16-01
0 608 701 018
1203-CN1
1746-NI16I
1746-NI8
1746-P4
1747-ASB
1747-BSN
1747-L541
1747-L541C
1747-L542
1747-L551
1747-L553
1747-SN
1756-CNB
1756-CNBR
1756-ENBT
1756-IB32
1756-IF16
1756-IM16I
1756-L55M12
1756-L61
1756-OF6CI
1756-OW16I
1756-PA72
1756-TBCH
1784-CF64
1784-PCIC
1784-PKTX
1786-TPS
1786-XT
1794-IB16
1794-PS3
1C31129G03/1C31132G01
1C31224G01/1C31227G01
1C31234G01/1C31238H01
5X00070G04/1C31116G04
5X00119G01/5X00121G01
CH-1290
140CPS21400
1179BX12CR14VS364
HE693PBM101F
IC200GBI001-BF
IC200PWR001D
IC693MDL231
M3AA200MLA
6ES5246-4UB21
XC5000-400±2X5%/230
AK-BX553
6AV6647-0AE11-3AX0
972-0DP01
972-0DP10
1771-IBD
1771-OBD
1771-P6S
1785-L11B
DS200TBQCG1ABB
DS200TCTGG1A
DS200TBQCG1ABB
DS200TCTGG1A
NRG05-D240AC-4Q
A16B-1212-0950
IC200CPU002
KR-210AU
KR-A55MS
IC693APU301
1747-L532
SST-1500-105
SDCS-FIS-31
1179BX12CR14VS364
SDCS-FIS-31
AKM43G-ACSN2-02
SERVOSTAR 400-A
808 PCI
PPC5C-AAC-AGBA-BBB-FO
SGMPH-01A1A-YR22
A-06B-6079-H104
TKL4V4610
1C31129G03/1C31132G01
1C31224B01/1C31227G01
1C31234G01/1C31238H01
5X00070G04/1C31116G04
5X00119G01/5X00121G01
1746-A10
1746-A13
1746-A7
1746-C9
1747-CP3
IS215UCVEM06A
E5CS-R1KJ
1746-IB16
1746-N14
1746-OB16E
1746-P3
UDK5128NW
1336-SN-SP16A
SCPSD-250-04-17
IC698CMX016
IC698PSA350
A16B-3200-0260
MP3101
PI3381
ATV312HU22N4
1FK6081-6AF71-1ZZ9-ZS47
VAP025
V18345-1010521001
6ES7331-7KF02-0AB0
3HAC023195-001/02
LS803D ML:420MM ID:20908923
SSN-BG89A
SSN-BG89D
3HAC033203-001
3HAC033234-001
3HAC14550-4
6ES74143XM050AB0
MDX61B0075-5A3-4-00
JEPMC-AN210
MP3101
PI3381
ENRZ-DU10
1746-IB16
1746-NI8
1761-L10BWA
919C70100
61CFS300R12KE3
AGDR-71C
LT9213A
1794-L33
86142B
FHA-40C-100-E250
HA-655(675)-4-200
1C31194G01
1C31197G01
RMIO-01
LQ104V1DG51
PS-M06D12S5-NJ1L(S)
1756-ENBT
1756-L61
1756-PA72
HFD3070
MR-H500ACN
1C31194G01
1C31197G01
SGMG-30A2AB
SGMG-44A2AB
SGMG-75A2AB
AINT-14C
FS450R12KE3/AGDR-71C
A860-2005-T301
MP3101
PI3381
6ES7972-0AA02-0XA0
6GK1100-2AB00
6GK1102-6AA00
1756-CNB
1756-ENBT
1756-L61
1756-PA72
SST-PB3-CLX-RLL
FBM204
M3707
CP303250
CL223E 3
1756-OB32/A
460K78.00
DI801
DO801
MP3101
PI3381
NC 80C
PC250
22A-A4P5N104
1756-AP75
1770-XYC
51402645-200
IC698CHS017
IC698CRE030
1771SC-OMI16
IC693MDL231
IC693MDL330
A06B-6102-H222#H520
PCI-2727A
140CPU67160
TSXMRPC007M
UNITY PRO程序软件
XVME-653
VT3000-S35-R5
1756-CNB/E
1756-L61/B
ACS800-01-0100--+P901
ACS800-04-0075-3+P901
ERK15U-1212
31C110-503-4-00
6FC5411-0AA00-0AA0
1756-HSC
1756-OF8
PFEA112-20