概述
上篇文章跟上上篇文章讲的的比较通用的NFC和ISO15693协议的内容.接下来就讲讲关于ST25DV04KC这颗芯片的花活.虽然说是花活,但其实也只是ST给这颗芯片在通用的NFC功能以外给加的自定义功能.
之前文章中有讲过在底层通讯里有个Command Code,而Command Code的值有几种类型:
ST的花活都都在自定义命令里,主要有以下命令:
- Read Configuration:用于读静态配置寄存器.
- Write Configuration:用于写静态配置寄存器.
- Read Dynamic Configuration:用于读动态寄存器.
- Write Dynamic Configuration:用于写动态寄存器.
- (Fast) Read Message:用于读取快速传输模式信箱.
- (Fast) Write Message:用于写入快速传输模式信箱.
其中Read Configuration和Write Configuration命令可以用于操作用户存储区配置寄存器以及系统配置区.
其中系统配置区的存储器映射如下:
而Read Dynamic Configuration与Write Dynamic Configuration命令可以操作芯片内的动态寄存器,其存储器映射如下:
(Fast) Read Message与(Fast) Write Message命令可以操作芯片内256字节的快速传输模式缓冲区.用于NFC读卡器端与ST25DV芯片所在板子的I2C端之间传输数据.这里因为我没用到这个功能,所以(Fast) Read Message与(Fast) Write Message命令我就不讲了.
一条一条看
首先是Read Configuration的请求命令包格式:
SOF(1byte) | flags(1byte) | Read Configuration(1byte) | IC Mfg编码(1byte) | UID(8byte) | register addr(1byte) | CRC(2byte) | EOF(1byte) |
帧开始 | 标识 | 命令代码=0xA0 | 固定为0x02 | 可选 | 寄存器地址 | CRC16 | 帧结束 |
注意:对于这条命令,flags中的目录标志只支持设置为0.
当出现错误,设置了Flag中的错误标志位时,命令响应包格式如下:
SOF(1byte) | flags(1byte) | Error Code(1byte) | CRC(2byte) | EOF(1byte) |
帧开始 | 标识 | 错误代码 | CRC16 | 帧结束 |
其中,Error Code可能的值与解释:
- 0x02:无法识别指令
- 0x03:不支持该选项
- 0x10:块不可用
- 0x0Fh:未知错误
未出现错误,正常响应时,命令响应包格式如下:
SOF(1byte) | flags(1byte) | register data(1byte) | CRC(2byte) | EOF(1byte) |
帧开始 | 标识 | 寄存器值 | CRC16 | 帧结束 |
接下来是Write Configuration的请求命令包格式:
SOF(1byte) | flags(1byte) | Write Configuration(1byte) | IC Mfg编码(1byte) | UID(8byte) | register addr(1byte) | register data(1byte) | CRC(2byte) | EOF(1byte) |
帧开始 | 标识 | 命令代码=0xA1 | 固定为0x02 | 可选 | 寄存器地址 | 寄存器值 | CRC16 | 帧结束 |
注意:对于这条命令,flags中的目录标志只支持设置为0.另外若在写入之前LOCK_CFG寄存器=1,则需要先提供有效的RF配置密码(0x00命令),以打开RF配置安全会话,才能使用这条命令.
当出现错误,设置了Flag中的错误标志位时,命令响应包格式如下:
SOF(1byte) | flags(1byte) | Error Code(1byte) | CRC(2byte) | EOF(1byte) |
帧开始 | 标识 | 错误代码 | CRC16 | 帧结束 |
其中,Error Code可能的值与解释:
- 0x2:无法识别指令
- 0x03:不支持指令选项
- 0x0F:出错,未提供信息
- 0x10:块不可用
- 0x12:块已锁定,内容无法更改
- 0x13:指定块未成功编程
未出现错误,正常响应时,命令响应包格式如下:
SOF(1byte) | flags(1byte) | CRC(2byte) | EOF(1byte) |
帧开始 | 标识 | CRC16 | 帧结束 |
Read Dynamic Configuration的请求命令包格式:
SOF(1byte) | flags(1byte) | Read Dynamic Configuration(1byte) | IC Mfg编码(1byte) | UID(8byte) | register addr(1byte) | CRC(2byte) | EOF(1byte) |
帧开始 | 标识 | 命令代码=0xAD | 固定为0x02 | 可选 | 寄存器地址 | CRC16 | 帧结束 |
注意:对于这条命令,flags中的目录标志只支持设置为0.
当出现错误,设置了Flag中的错误标志位时,命令响应包格式如下:
SOF(1byte) | flags(1byte) | Error Code(1byte) | CRC(2byte) | EOF(1byte) |
帧开始 | 标识 | 错误代码 | CRC16 | 帧结束 |
其中,Error Code可能的值与解释:
- 0x02:无法识别指令
- 0x03:不支持该选项
- 0x10:块不可用
- 0x0Fh:未知错误
未出现错误,正常响应时,命令响应包格式如下:
SOF(1byte) | flags(1byte) | register data(1byte) | CRC(2byte) | EOF(1byte) |
帧开始 | 标识 | 寄存器值 | CRC16 | 帧结束 |
接下来是Write Dynamic Configuration的请求命令包格式:
SOF(1byte) | flags(1byte) | Write Dynamic Configuration(1byte) | IC Mfg编码(1byte) | UID(8byte) | register addr(1byte) | register data(1byte) | CRC(2byte) | EOF(1byte) |
帧开始 | 标识 | 命令代码=0xAE | 固定为0x02 | 可选 | 寄存器地址 | 寄存器值 | CRC16 | 帧结束 |
注意:对于这条命令,flags中的目录标志只支持设置为0.
当出现错误,设置了Flag中的错误标志位时,命令响应包格式如下:
SOF(1byte) | flags(1byte) | Error Code(1byte) | CRC(2byte) | EOF(1byte) |
帧开始 | 标识 | 错误代码 | CRC16 | 帧结束 |
其中,Error Code可能的值与解释:
- 0x2:无法识别指令
- 0x03:不支持指令选项
- 0x0F:出错,未提供信息
- 0x10:块不可用
未出现错误,正常响应时,命令响应包格式如下:
SOF(1byte) | flags(1byte) | CRC(2byte) | EOF(1byte) |
帧开始 | 标识 | CRC16 | 帧结束 |
Comments | 1 条评论
博主 wu先生
不明觉历呀。