在阅读E2E规范时,发现R19-11的版本中有个挺坑的错误,耽误了一点时间,分享出来大家参考一下。
在E2E规范文件:E2E Protocol Specification(Document Identification No 849, Part of Standard Release R19-11)的第6.3.11节:E2E Profile 1 Protocol Examples中,给出了E2E Profile 1的计算示例。
其中6.3.11.2节给出的示例中,DataIDMode为E2E_P01_DATAID_LOW,其他参数为:
E2E_P01ConfigType field | Value |
CounterOffset | 8 |
CRCOffset | 0 |
DataID | 0x123 |
DataIDNibbleOffset | 12 |
DataLength | 64 |
MaxDeltaCounterInit | 1 |
MaxNoNewOrRepeatedData | 15 |
SyncCounterInit | 0 |
规范中给出的计算结果为:
1)counter为0时,CRC计算结果为0x5F
2)counter为1时,CRC计算结果为0x02
按规范中给出的计算CRC的说明,代入计算CRC的数值(数组)应该是:
1)当counter为0时:0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
2)当counter为1时:0x23, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
其中的0x23是DataID的低字节数值。
但按该数据计算出的CRC结果应该为:
1)counter为0时,CRC计算结果为0xCE
2)counter为1时,CRC计算结果为0x93
如果将计算数据中的0x23改为0x01,也即是将DataID的高字节数据代入CRC计算,则计算结果与规范中给出的示例的计算结果一致。
所以6.3.11.2节中的CRC计算示例,应该是将DataID的高字节、低字节数据混淆了(按规范应代入低字节数据,但实际代入的是高字节数据)
同理,6.3.11.1节和6.3.11.3节中计算CRC时的DataID的高字节、低字节数据有同样的问题。
核查了AUTOSAR最新版本的规范R23-11,其6.5.5.1节和6.5.5.2节的计算示例结果已更正,但6.5.5.3节的计算结果似乎仍然不对。