20.2.6 SDIO命令寄存器:SDIO_CMD
31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
- | |||||||||||||||
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
- | CE_ATACMD | nIEN | ENCMDcomp1 | SDIOSuspend | CPSMEN | WAITPEND | WAITINT | WAITRESP | CMDINDEX |
Bit 14:CE-ATA命令
如果設置該位,CPSM轉至CMD61
Bit 13:不使能中斷
如果未設置該位,則使能CE-ATA設備的中斷
Bit 12:使能CMD完成
如果設置該位,則使能命令完成信號
Bit 11:SDIO暫停命令
如果設置該位,則將要發送的命令是一個暫停命令(只能用于SDIO卡)
Bit 10:命令通道狀態機使能位
如果設置該位,則使能CPSM
Bit 9:CPSM等待數據傳輸結束(CmdPend內部信號)
如果設置該位,則CPSM在開始發送一個命令之前等待數據傳輸結束
Bit 8:CPSM等待中斷請求
如果設置該位,則CPSM關閉命令超時控制并等待中斷請求
Bit 7~Bit 6:等待響應位
00:無響應,期待CMDSENT標志
01:短響應,期待CMDREND或CCRCFAIL標志
10:無響應,期待CMDSENT標志
11:長響應,期待CMDREND或CCRCFAIL標志
Bit 5~Bit 0:命令索引,作為命令的一部分發送到卡中
20.2.7 SDIO數據定時器:SDIO_DTIMER
31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
DATATIME[31:16] | |||||||||||||||
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
DATATIME[15:0] |
Bit 31~Bit 0:數據超時時間,以卡總線時鐘周期為單位的數據超時時間
20.2.8 SDIO數據長度寄存器:SDIO_DLEN
31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
- | DATALENGTH[24:16] | ||||||||||||||
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
DATALENGTH[15:0] |
Bit 24~Bit 0:數據長度,要傳輸的數據字節數目
20.2.9 SDIO數據控制寄存器:SDIO_DCTRL
31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
- | |||||||||||||||
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
- | SDIOEN | RWMOD | RWSTOP | RWSTART | DBLOCKSIZE | DMAEN | DTMODE | DTDIR | DTEN |
Bit 11:SDIO使能功能
如果設置了該位,則DPSM執行SDIO卡特定的操作
Bit 10:讀等待模式
0:停止SDIO_CK控制讀等待
1:使用SDIO_D2控制讀等待
Bit 9:讀等待停止
0:如果設置了RWSTART,執行讀等待
1:如果設置了RWSTART,停止讀等待
Bit 8:讀等待開始
設置該位開始讀等待操作
Bit 7~Bit 4:數據塊長度,當選擇了塊數據傳輸模式,該域定義數據塊長度
0000:塊長度=1字節
0001:塊長度=2字節
0010:塊長度=4字節
0011:塊長度=8字節
0100:塊長度=16字節
0101:塊長度=32字節
0110:塊長度=64字節
0111:塊長度=128字節
1000:塊長度=256字節
1001:塊長度=512字節
1010:塊長度=1024字節
1011:塊長度=2048字節
1100:塊長度=4096字節
1101:塊長度=8192字節
1110:塊長度=16384字節
1111:保留
Bit 3:DMA使能位
0:關閉DMA
1:使能DMA
Bit 2:數據傳輸模式
0:塊數據傳輸
1:流數據傳輸
Bit 1:數據傳輸方向
0:控制器至卡
1:卡至控制器
Bit 0:數據傳輸使能位
如果設置該位為1,則開始數據傳輸。根據DTSIR方向位,DPSM進入Wait_S或Wait_R狀態,如果在傳輸的一開始就設置了RWSTART位,則DPSM進入讀等待狀態。不需要在數據傳輸結束后清除使能位,但必須更改SDIO_DCTRL以允許新的數據傳輸。
20.2.10 SDIO狀態寄存器:SDIO_STA
31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
- | CEATAEND | SDIOIT | RXDAVL | TXDAVL | RXFIFOE | TXFIFOE | RXFIFOF | TXFIFOF | |||||||
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
RXFIFOHF | TXFIFOHF | RXACT | TXACT | CMDACT | DBCKEND | STBITERR | DATAEND | CMDSENT | CMDREND | RXOVERR | TXUNDERR | DTMEOUT | CTIMEOUT | DCRCFAIL | CCRCFAIL |
Bit 23:在CMD61接收到CE-ATA命令完成信號
Bit 22:收到SDIO中斷
Bit 21:在接收FIFO中的數據可用
Bit 20:在發送FIFO中的數據可用
Bit 19:接收FIFO空
Bit 18:發送FIFO空
若使用了硬件流控制,當FIFO包含2個字時,TXFIFOE信號變為有效。
Bit 17:接收FIFO滿
若使用了硬件流控制,當FIFO還差2個字滿時,RXFIFOF信號變為有效。
Bit 16:發送FIFO滿
Bit 15:接收FIFO半滿,FIFO中至少還有8個字
Bit 14:發送FIFO半空,FIFO中至少還可以寫入8個字。
Bit 13:正在接收數據
Bit 12:正在發送數據
Bit 11:正在傳輸命令
Bit 10:已發送/接收數據塊(CRC檢測成功)
Bit 9:在寬總線模式,沒有在所有數據信號上檢測到起始位
Bit 8:數據結束(數據計數器,SDIO_DCOUNT=0)
Bit 7:命令已發送(不需要響應)
Bit 6:已接收到響應(CRC檢測成功)
Bit 5:接收FIFO上溢錯誤
Bit 4:發送FIFO下溢錯誤
Bit 3:數據超時
Bit 2:命令響應超時
命令超時時間是一個固定的值,為64個SDIO_CK時鐘周期。
Bit 1:已發送/接收數據塊(CRC檢測失敗)
Bit 0:已收到命令響應(CRC檢測失敗)
注:狀態寄存器可以用來查詢SDIO控制器的當前狀態。比如SDIO_STA的位2表示命令響應超時,說明SDIO的命令響應出了問題。我們通過設置SDIO_ICR的位2則可以清除這個超時標志,而設置SDIO_MASK的位2,則可以開啟命令響應超時中斷,設置為0關閉。
20.2.11 SDIO數據FIFO寄存器:SDIO_FIFO
31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
FIFODATA[31:16] | |||||||||||||||
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
FIFODATA[15:0] |
Bit 31~Bit 0:接收或發送FIFO數據
FIFO數據占據32個32位的字,地址為:SDIO基址+0x80至SDIO基址+0xFC
數據FIFO寄存器包括接收和發送FIFO,他們由一組連續的32個地址上的32個寄存器組成,CPU可以使用FIFO讀寫多個操作數。例如我們要從SD卡讀數據,就必須讀SDIO_FIFO寄存器,要寫數據到SD卡,則要寫SDIO_FIFO寄存器。SDIO將這32個地址分為16個一組,發送接收各占一半。而我們每次讀寫的時候,最多就是讀取發送FIFO或寫入接收FIFO的一半大小的數據,也就是8個字(32個字節),在操作SDIO_FIFO(不論讀出還是寫入)必須是以4字節對齊的內存進行操作,否則將導致出錯。
20.3 SD卡初始化
20.3.1 卡上電流程
20.3.2 卡初始化流程
-
單片機
+關注
關注
6032文章
44522瀏覽量
633217 -
存儲器
+關注
關注
38文章
7455瀏覽量
163616 -
SD卡
+關注
關注
2文章
560瀏覽量
63812 -
SDIO
+關注
關注
2文章
72瀏覽量
19294
發布評論請先 登錄
相關推薦
評論