STM32/STM8技术论坛
直播中

刘丽

8年用户 1356经验值
私信 关注
[问答]

请教STM32F103与AT24Cxx使用IIC通信问题

11.png
请问(addr 256)<<1起什么作用?如何实现的?

请问(addr/256)<<1起什么作用?如何实现的?
请问(addr 256)<<1起什么作用?如何实现的?
此语句参数相加是否等同于将两个参数分别分别发送?

回帖(9)

贾小龙

2018-12-13 16:06:54
(addr/256)<<1
等同于
(addr/256) * 2
举报

王利祥

2018-12-13 16:07:07
后面是“翻页”的意思,因为24c4——24c16是单字节寻址,当超过1字节地址(255)时,需更换一页。24c32以上的就是双字节寻址,则不需这样处理。
举报

nhcp

2018-12-13 16:08:19
很简单,因为 IIC 的地址是高 7 比特,发送的地址最低位是 R/W 位。

当使用器件地址 + 数据地址发送时,数据地址势必要左移一位。
举报

nhcp

2018-12-13 16:08:27
器件地址与数据地址(例如数据页、寄存器地址)是合在一起,还是分开,是器件所实现的规范决定的。

在这个例子中,是将二者合成一个地址
举报

刘丽

2018-12-13 16:09:30
假如数据地址256,256/255<<1得到2,是把前面的地址2覆盖了么?
举报

王杰

2018-12-13 16:10:37
此时,从地址不一样,一开始是0xA0,翻一页即是0xA1,接着就是0xA2
举报

刘丽

2018-12-13 16:10:54
0xA0不是器件地址么,翻到0xA1不就翻到另一个AT24Cxx了么?
举报

李英

2018-12-13 16:11:30
不是,对于24c04——24c16来说,也相当于占用了“另一个24cxx”的地址
举报

李英

2018-12-13 16:11:40
0xA0是器件的地址,24c02容量为256字节,可以挂8个24c02;24c04容量为512字节,此时占用一个0xA1地址作为“页地址”,故此时只能挂4个24c04;以此类推到24c16。24c32以上是双字节寻址,则不会占用地址,估计前面是设计缺陷,只用了单字节地址,但为了兼容老器件,只能这样处理。
举报

更多回帖

×
20
完善资料,
赚取积分