请选择 进入手机版 | 继续访问电脑版

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

STM8L152 与M24M02通信异常,重复起始位后M24M02对地址位没有...

[复制链接]
zxdsccd 提问时间:2018-12-30 16:54 /
本帖最后由 zxdsccd 于 2018-12-30 16:58 编辑

不好意思,刚写帖子的时候又过了一遍手册,已经发现问题,已经解决了~!

STM8L152手册I2C主机接收模式描述

STM8L152手册I2C主机接收模式描述
收藏 评论1 发布时间:2018-12-30 16:54

举报

1个回答
zxdsccd 回答时间:2019-1-3 19:09:33
我自己回复总结一下,在写命令是没啥特殊的,起始位,器件地址+写位,存储地址高字节,存储地址低字节,数据。。。。。,写模式所有应答都由从器件M24M02产生,没传送一个字节后主机收到应答才能传送下一个字节。
读模式麻烦一点,我的问题也出在这,先发送伪写命令来改变M24M02内部的地址指针,M24M02内部的地址指针是上次读或写命令结束时的地址指针,如果不需要改变该指针可以不发送伪写命令,直接读就行,伪写命令为 起始位,器件地址+写位,存储地址高字节,存储地址低字节,停止位。停止位可以不要,停止位只是起到释放总显的作用,应为后面已经连接的两器件还需要通信,所以可以不释放总线,即可以不发送停止位。
伪写命令后接着发送起始位,器件地址+读位,丛机应答,然后主机进入接收模式自动接收M24M02发出的数据,接收数据时应答由主机产生,丛机每收到一个应答,将下一个数据发送到总线,丛机内部数据地址指针自动加1,如果主机忙,则等待主机空闲再自动发送数据,主机有两个接收数据暂存器,一个为真正的暂存器I2C_DR,一个为串行数据接收器,该接收器接收到8位数据后将数据放入I2C_DR中,如果I2C_DR有数据,则等待I2C_DR空后才将数据放入I2C_DR中,在等待的过程中主机拉低总线,告诉丛机现在主机忙,待会空闲时再发送数据,~!!!!!!!!!!!!!最关键的就在这,如果只是读取一个数据,则主机发不发送应答位都无所谓,只要接收完成后发送停止位来释放总线就行。如果是接收多个数据,且主机有其他工作要做,所以主机读I2C_DR较慢,则在最后一个数据你想停止接收的时候,I2C_DR中和串行接收器中都有数据,计算接收数据个数的时候一定要把这两个数据考虑进去,不然容易出错。我的问题就是没有计算这两个数据,导致老是和需要的数据错位。
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版