磁编芯片 MT6701 SSI接口调试
磁编芯片 MT6701 SSI接口调试
最近调试MT6701磁编芯片SSI接口的驱动程序,数据很早就读出来了,但是CRC校验一直不过。
MT6701的CRC校验采用CRC-6校验,多项式为 X^6+X+1。于是去网上找到了CRC6_ITU程序,多项式一致。并且使用测试数据分别对CRC6_ITU程序和网上的CRC计算器的计算结果进行了比对,也都是一致的,因此就一直没有怀疑是CRC计算的问题。
后来以为是SSI接口数据读取时序有问题导致的数据错位,从而导致CRC校验错误。于是花了很大时间调整和验证SSI接口的数据读取时序,不过最终CRC校验仍然通不过。
最后联系到厂家,给了一份crc计算的程序,用这个程序一算,这下就对了。转动磁铁,角度数据也跟着改变,也再无CRC校验错误,磁铁静止不动时,数据也会保持稳定。
相关CRC计算程序如下:
//for mt6701 crc-6 check
uint8_t crc6_itu(uint8_t *data, uint32_t length)
{
uint8_t i;
uint8_t crc = 0; // Initial value
while(length--)
{
crc ^= *data++; // crc ^= *data; data++;
for (i=6; i>0; --i)
{
if (crc & 0x20)
crc = (crc << 1) ^ 0x03;
else
crc = (crc << 1);
}
}
return (crc&0x3f);
}
可以看出,这个CRC-6的程序与网上广泛流传的CRC6_ITU标准程序相差较大。
对于国产传感器芯片,希望厂家能完善产品相关资料。如果MT6701一开始就提供了测试demo,甚至只提供相应的CRC计算代码,我都不用浪费这么多时间在SSI接口调试上。
记录下这份经历,希望能为使用MT6701或相关型号的产品人提供到一些帮助。
版权声明:本文为SkyBlue05原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。