关于STM32L073中I2C(SMBUS)的问题
准备做一个项目,用到STM32L073芯片中I2C模块的SMBUS模式,最近对其进行了调试,产生了以下疑问,望有人能够解惑,不胜感激!1.SMBUS的收发两端的PEC字节不一致,导致PECERR置1;详细情况是这样的:
设置NBYTES=3;ADD10=1;HEAD10R=0;RD_WRN=1;PECBYTE=1;
想要从从设备读取2次数据,每次读取2个数据字节+1Byte PEC字节,两次读取中间不产生STOP,流程如下(省略了ACK):
START -> ADDR0(bit0=0) -> ADDR1 -> ADDR0(bit0=1) -> DAT0 -> DAT1 -> PEC0 -> RESTART -> ADDR0(bit0=0) -> ADDR1 -> ADDR0(bit0=1) -> DAT2 -> DAT3 -> PEC1 -> STOP;
如上流程,主从两边计数得到的PEC数据不一致,经分析,主端参与计算的字节为ADDR0(bit0=0)、ADDR1、ADDR0(bit0=1)、DAT2、DAT3,最后计算得到PEC1,而从端参与计算的字节为ADDR0(bit0=0)、ADDR1、ADDR0(bit0=1)、DAT0、DAT1,ADDR0(bit0=0)、ADDR1、ADDR0(bit0=1)、DAT2、DAT3,计算得到待发送的PEC1,不知哪种正确,或者我程序中什么地方配置有问题。
哪位熟悉能帮忙解答一下!
本帖最后由 toofree 于 2018-2-5 10:23 编辑
PEC校验字节包括了PEC字节之前的所有数据。
下面是SMBUS协议中对PEC的描述
尝试修改你的设置,逐层修改你的设置参数,分析最终正确的可能性,得到正确的流程。另外找点类似的实验资料看看,重新确定步骤的正确。 看样子,从端把主端的数据也计算了一次。
找了个例程给你参考一下:
http://blog.csdn.net/zlk1214/article/details/76037417
页:
[1]