基于Dragonboard 410c的总线控制之I2C(一)

    回顾这段时间做的小物品,发现有这么几种常用的总线,如:I2C、UART、SPI等,接下来看一下这几种总线的工作方式和配置方法。

    首先是i2c总线。

    1.线路比较简单,只有一条数据线SDA,一条时钟线SCL。

    2.串行的8位双向数据传输模式一般有三种,分别是标准模式:100KHZ;快速模式下可以达到:400KHZ;高速模式下可以达到3.4MHZ

    接下来看一下传输协议

    1.开始和结束

      当SCL为高电平时,SDA由高电平跳变到低电平表示开始传输数据

      当SCL为高电平时,SDA由低电平跳变到高电平表示结束数据传输

    2.数据传输规则

     i2c是大端模式传输,即高位在前低位在后,每次传输一个字节。当SCL为高电平时,SDA上的数据要保持不变;当SCL为低电平时,SDA上的数据可以进行改变。

 

   

    3.数据的读写

     首先是写数据:

    (1)主设备发送起始位

    (2)主设备发送从设备地址和读/写位,高电平是读,低电平是写。设备地址一般都是8位,这里为什么是7位呢,后面解释,我可是在这里吃过亏的。

    (3)从设备应答

    (4)主设备发送要写入的内部寄存器地址

    (5)从设备应答

    (6)主设备发送数据

    (7)从设备应答

    (8)主设备发送停止位


     读取数据:

   

    (1)主设备发送开始位

    (2)主设备发送从设备地址和读/写位

    (3)从设备应答

    (4)主设备发送从设备内部寄存器地址

    (5)从设备应答

    (6)主设备重新发送开始位和从设备地址及读位

    (7)从设备应答

    (8)从设备发送数据

    (9)主设备停止应答

    (10)主设备发送停止位

 

基本上传输协议就是这样了,接下来说一下容易出问题的地方。

1.上面提到的从设备地址问题,一般是8位,但是为什么时序图上只有7位呢?

下面援引其他人的解释:

i2c设备的7位地址是就当前i2c总线而言的,是“相对地址”。不同的i2c总线上的设备可以使用相同的7位地址。所以系统中一个i2c设备的“绝对地址”由二元组(i2c适配器的ID和设备在该总线上的7位地址)表示。这也排除了一个i2c总线上出现多个地址相同的设备。

注意点:

(1)同一个i2c上的设备,设备地址不能相同

(2)抓到i2c的波形后,7位地址右移一位才是你手册上给的地址。所以一旦报的错误是从设备没有应答时,就要看一下从设备地址是否正确,注意读/写函数里面是否有左移一位的操作,一般都是左移一位或上一个1或0,没有的话自己加上试试。




   

   

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值