- 打卡等级:常住居民III
- 打卡总天数:135
- 最近打卡:2024-12-25 10:15:05
荣誉版主
冲哥视频教程和各种开源资料QQ交流群884047237,可群
- 积分
- 8058

|
发表于 2024-2-18 08:33:25
|
显示全部楼层
“IIC_SENDBYTE(slave+0x01);这句有疑惑。芯片手册上没找到答案(新手不晓得查);后来百度查看了iic从机地址组成介绍获悉,最低一位是方向位,0表示对器件读,1表示对器件写。
那么IIC_SENDBYTE(slave+0x01)中slave是一个字节8位数,iic从机地址是7位数+1位方向位,函数传递slave地址不是已经包含了方向位了吗,为何还要+0x01?直接IIC_SENDBYTE(slave+1)是否可行?为啥?”
一般来说器件的的设备地址是一个固定的字节,假设某个器件的设备地址是0x50(七位二进制数),按照“iic从机地址是7位数+1位方向位”来说就是写入的时候这个地址是0XA0(即0x50<<1 | 0),读取的时候就是0xA1,因为读写的时候都需要0x50<<1,所以这里一般会把地址(也就是slave)直接定义为0xa0,那么写入没问题,读取的时候就要+1,直接IIC_SENDBYTE(slave+1)也可以,但是看着比较冗余,尤其是这条总线上多几个IIC器件的时候,明明写一个地址就搞定了,每次都要在+1的话就容易遗漏了
|
|