我在一条 MACControl 命令之后编写代码来读取 MACData。 为了确保稳定性、我打算验证读取缓冲区的校验和。
根据 TRM:
3.25 MACDataSum():0x60 此读写函数返回当前子命令和数据块的校验和。 对该寄存器的写入提供执行需要 数据的子命令所需的校验和。 校验和的计算方式为 ManufacturerAccessControl()和 MACData()字节之和的补码。 MACDataLen()确定 校验和中包含的 MACData()的字节数。 3.26 MACDataLen():0x61 此读写函数返回作为响应一部分并 包含在 MACDataSum()中的 MACData()的字节数。
因此、对于一个诸如 DEVICE_NAME (0x004A)或 SECURITY_KEYS (0x0035)的控制子命令、我希望看到 MACData 加2 (制造商访问控制)中的字节数量、并使用它们来计算校验和。 但是,MACDataLen()总是比预期高两个。
例如:
在图中、第一个子命令 device_name 应返回9个字节、从0x3E 开始、但返回11 (0x0B)。 在这种情况下、由于两个额外的字节为零、因此不会影响校验和。
同样、第二个子命令 security_keys 应返回10个字节、但返回12个字节。 同样、没有问题、因为以下字节为0。
但是、上面的最后一个子命令读取0x4000上的 CC 校准数据、该数据应返回34个字节、但返回36个字节。
显然、监测计会将 MACDataLen 和 MACDataSum 中的两个字节添加到返回的数据数中。
这是预期行为吗?
