请教一下 i2c 从机地址的问题?

入手了一个 LCD1602_RGB 的数据显示板

image.png

image.png

之后查询文档其从机地址为:

image.png

但是在实际提供的代码这个地方:

image.png

0x7c>>1 向右边移了一位

我不太理解这个操作,才刚刚进行单片机开发,不太理解这个地方,希望谁可以帮忙解答一下 (^∀^●)ノシ

阅读 3.8k
1 个回答

先说结论:代码中的地址定义之所以把规格书中的地址右移一位,是因为你现在参考的这份代码的I2C操作函数定义的I2C地址格式是7bit的原因。

既然题主是新手,就稍微啰嗦解释一下,如果有的信息已经知道了直接跳过就好。
I2C实际操作中,读写操作都是由host发起,为了slave能区分来自host的读写,读写指令开头的slave地址是不同的。这里看题主自己贴的规格书,规格书中Slave address是8bit,其中最低位的bit是R/W,也就是读写位。0表示写,1表示读。
也就是说,对于这块LCD,写地址是0x7C,读地址是0x7D。

这里就引入了I2C地址的两种定义格式,7bit和8bit地址,主要看代码中的函数对于I2C地址的操作方式上的区别。

8 bit

对于使用8bit格式的读写函数,从机地址一般直接定义为写地址,也就是0x7C。
当需要读操作的时候,把从机地址直接+1

7 bit

对于使用7bit格式的读写函数,会将从机地址先右移一位(忽略R/W位)存储。需要操作I2C时,则先将7bit地址左移一位,最低位bit根据读写情况置0或者1。
题主正在参考的代码应该就是这种情况,翻翻后边的函数可以看到在实际操作的时候会对SLAVE address执行了左移一位操作。

所以两种格式仅仅时定义上的区别,体现在时序层面上是一致的。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题