IIC读写16位地址的寄存器

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/tq384998430/article/details/53580267
一般来说IIC器件的内部寄存器地址都是8位的,这样在进行读写操作时,发送完器件地址之后直接发送一个字节的寄存器地址,然后即可以进行读写。但是有的器件内部寄存器是按照16位地址编排的,例如一些EEPROM器件,由于存储的数据量较大就会需要较大的寻址空间,对于这种的器件的内部寄存器寻址就需要多个字节的地址,也就是在发送完器件地址之后需要发送多个寄存器地址字节,具体实现如下程序所示:

u8 IIC_Read2(u8 device,u16 addr)
{
    u8 temp;
    IIC_Start();
    IIC_SendByte(device);
    IIC_Wait_Ack();
    IIC_SendByte((u8)(addr >> 8));
    IIC_Wait_Ack();
    IIC_SendByte((u8)addr);
    IIC_Wait_Ack();
    IIC_Start();
    IIC_SendByte(device+1);
    IIC_Wait_Ack();
    temp = IIC_ReadByte();
    IIC_NAck();//发送nACK
    IIC_Stop();
    return temp;
}
通过程序可以看到发送完器件地址device之后先后发送了寄存器地址的高字节和低字节,然后再进行读取。

————————————————
版权声明:本文为CSDN博主「Mr_汤」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/tq384998430/article/details/53580267

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/yhy08090/article/details/90024174
有关I2C总线时序,下面的文章写得很好,推荐阅读

https://www.cnblogs.com/BitArt/archive/2013/05/28/3103917.html#commentform

8位设备地址,8位寄存器地址,8位数据的情况完全够了

下面我想补充的是8位设备地址,16位寄存器地址,16位数据的传输时序,如下:

 
————————————————
版权声明:本文为CSDN博主「yhy08090」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/yhy08090/article/details/90024174

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值