概述

上篇文章跟上上篇文章讲的的比较通用的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帧结束


一个电子工程师的自我修养