你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

关于STM32L073中I2C(SMBUS)的问题

[复制链接]
schui007 提问时间:2017-12-21 18:55 /
       准备做一个项目,用到STM32L073芯片中I2C模块的SMBUS模式,最近对其进行了调试,产生了以下疑问,望有人能够解惑,不胜感激!
1.  SMBUS的收发两端的PEC字节不一致,导致PECERR置1;详细情况是这样的:
     设置NBYTES=3;ADD10=1;HEAD10R=0;RD_WRN=1ECBYTE=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,不知哪种正确,或者我程序中什么地方配置有问题。

哪位熟悉能帮忙解答一下!


收藏 1 评论3 发布时间:2017-12-21 18:55

举报

3个回答
七哥 回答时间:2018-2-5 10:15:13
本帖最后由 toofree 于 2018-2-5 10:23 编辑

PEC校验字节包括了PEC字节之前的所有数据。
下面是SMBUS协议中对PEC的描述
傲游截图20180205101341.png

傲游截图20180205102235.png

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

feixiang20 回答时间:2018-2-5 10:35:13
尝试修改你的设置,逐层修改你的设置参数,分析最终正确的可能性,得到正确的流程。另外找点类似的实验资料看看,重新确定步骤的正确。

评分

参与人数 1蝴蝶豆 +1 收起 理由
zero99 + 1

查看全部评分

无薪税绵 回答时间:2018-2-5 11:23:04
看样子,从端把主端的数据也计算了一次。
找了个例程给你参考一下:
http://blog.csdn.net/zlk1214/article/details/76037417

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版