-
盛思瑞CO2传感器读数据错误,百思不解。
这是CRC函数:uint8_tsensirion_i2c_generate_crc(constuint8_t*in,uint16_tcount){uint16_tcurrent_byte;uint8_tcrc=CRC8_INIT;uint8_tcrc_bit;/*calculates8-Bitchecksumwithgivenpolynomial*/for(current_byte=0;current_byte<count;++current_byte){crc^=(in[current_byte]);for(crc_bit=8;crc_bit>0;--crc_bit){if(crc&0x80)crc=(crc1=0x14?Orcheckdatasheetforcorrectwriteaddress)iic_Wait_Ack();iic_SendData(0x36);//Commandbyte3iic_Wait_Ack();iic_SendData(0x15);//Argumentbyte1iic_Wait_Ack();iic_SendData(0x00);//Argumentbyte2iic_Wait_Ack();iic_SendData(0x11);//Argumentbyte3iic_Wait_Ack();iic_SendData(0xf3);//Argumentbyte3iic_Wait_Ack();iic_Stop();delay_100us(100);出现的错误现象是:iic_SendData(0xf3);就会通讯失败,注意0xF3是CRC计算值,但是如果任意发一个CRC字节,不是计算的0xf3结果,任意一个。比如:0xfd,或者0x31,这时虽然下面的读数据失败,但是通讯并没有死亡。再后面的读productid指令还能读到结果。但是如果发的是函数计算的0xf3作为CRC字节发送,通讯就死亡。后面读productid也失败了。为什么发的是正确的CRC反而导致通讯死亡呢?
2025-09-17 6 -
stm8 BootLoader问题请教
情况是这样的:需求:通过CAN通讯升级APP代码,并且擦写flash的驱动也要通过CAN通讯发送,不能直接写在flash里面进行调用。(这样是为了安全)使用的MCU:stm8af系列问题:怎么样实现flash擦写函数不在代码里体现而是通过外部通讯获得。我现在的思路是把擦写函数编译出来的二进制代码存在数组里,然后用函数指针去调用,我觉得这种思路应该是没有问题的,但是试下来却不行。这种需求在汽车领域应该用的很多,请各位指点迷津。。感谢~~
2021-02-20 0