Edit online

DES 结构体

描述符地址必须按照 32 位对齐,每个描述符包含 16 字节的控制和状态信息,以及数据缓存的指针和容量。每个描述符由四个 DES 结构体组成,每个 DES 都存储 32 位数据。

DES0 用于配置控制信息,说明如下:

位域 位域名称 说明
31 OWN
  • 1,表示描述符由 IDMAC 控制。
  • 0,表示描述符由 Host 控制。当数据传输完成时,IDMAC 控制器对该位域清零。
30 CES (Card Error Summary) 错误位
  • 表示发送到 Card 或来自 Card 的错误状态。
  • 也存在于 OINTST 寄存器,与以下位域为逻辑或的关系:
    • BE:结束位错误
    • TO:响应超时
    • CRC:响应数据 CRC 错误
    • RTO:数据读超时
    • CRC:数据接收 CRC 错误
    • RE:响应错误
29:6 RESET /
5 ER (End of Ring) 置 1,表示描述符链表到达最后一个描述符。IDMAC 返回链表的基址,创建一个描述符环。仅在双缓存描述符结构时有效。
4 CH (Second Address Chained) 置 1,表示描述符的第二个地址是下一个描述符的地址,不是第二个缓存的地址。该位域置 1 时,DES1[25:13] 应该清零。
3 FS (Fist Descriptor) 置 1,表示描述符包含第一个缓存的数据。如果第一个缓存的容量为 0,下一个描述符包含起始数据。
2 LD (Last Descriptor) 与一次 IDMAC 传输的最后一个 block 有关。
  • 置 1,表示缓存指向该描述符的最后一个缓存数据。
  • 描述符结束后,剩余的字节数为 0。即描述符完成后且该位域置 1 时,剩余的字节数为 0。
1 DIC (Disable Interrupt on Completion) 置 1,防止 IDMAC 状态寄存器的 bit0/ 1 置位。
0 RES /

DES1 用于配置每个描述符的数据长度,说明如下:

位域 位域名称 说明
31:26 RES /
25:13 BS2 (Buffer 2 Size) 缓存 2 容量,表示第二个数据缓存的字节容量。
  • 缓存容量必须按 32 位对齐。
  • 置 0,DMA 忽略该缓存,跳到下一个双缓存结构的缓存。
  • 对于链式结构,该位域无效。此时 DES0[4] 置 1。
  • 如果在任意的描述符里该位被置 0,剩下的描述符不能为非零值,直到最后一个描述符。
12:0 BS1 (Buffer 1 Size) 缓存 1 容量,表示第一个数据缓存的字节容量。
  • 缓存容量必须按 32 位对齐。
  • 该位域不能为 0。
注: 如果仅有一个缓存被编程,必须使用缓存 1,而不是缓存 2。

DES2 用于配置第一个描述符的起始地址,说明如下:

位域 位域名称 说明
31:0 缓存地址指针 1
  • 使用双缓存结构时,表示第一个数据缓存的物理地址。
  • 对于链式结构,表示数据缓存的物理地址。

DES3 用于配置下一个描述符的起始地址,说明如下:

位域 位域名称 说明
31:0 缓存地址指针 2 使用双缓存结构时,表示第二个缓存的物理地址。如果 DES0[4] 置 1,该地址指向下一个描述符的地址。如果不是最后一个描述符,下一个描述符的地址必须按 32 位对齐,即 bit[1:0] 为 0,内部最低有效位被忽略。