嵌入式Linux(十四)IIC

1. IIC&AP3216C简介

  AP3216C是一个环境传感器。连接到I.MU6ULL的I2C1上。I2C1_SCL使用UART4_TXD,复用值为ALT2;I2C1_SDA使用UART4_RXD,复用为ALT2。

1.1 IIC协议

  I2C由SCL(串行时钟线)和SDA(串行数据线)控制,这两条线都接4.7K的上拉电阻。总线空闲的时候两根线都是高电平状态。I2C支持多从机,通过器件地址进行区分。
在这里插入图片描述
①起始位:SCL为高时,SDA出现下降沿,代表将要开始IIC通信。
在这里插入图片描述
②停止位:SCL为高时,SDA出现上升沿,代表将要结束IIC通信。
在这里插入图片描述
③数据传输:SCL为高时,SDA不能有边沿,要保持稳定。SCL为低时,SDA可以有电平变化。
在这里插入图片描述
④应答信号:主机发送完8位数据之后,将SDA设置为输入模式。主机提供时钟,从机通过拉低SDA发出应答信号给主机,表示通信成功,否则表示失败。

⑤I2C单字节写时序
主要分三步:发送设备地址,发送要写入的寄存器地址,发送写入数据。
在这里插入图片描述
1)开始信号。
2)发送I2C设备地址。地址是8位数据,高7位为设备地址,低1位是读写位,为1表示读操作,0表示写操作
3)就是2的读写位。
4)从机发送的ACK应答信号。
5)重新发送开始信号。
6)发送要写入数据的寄存器地址。
7)从机发送的ACK应答信号。
8)要写入的数据。
9)从机发送的ACK应答信号。
10)停止信号。

⑥I2C单字节读时序
主要分四步:发送设备地址,发送要读的寄存器地址,重新发送设备地址,输出要读取的寄存器值。
在这里插入图片描述
1)主机发送起始信号。
2)主机发送要读取的I2C从机地址。
3)读写位。注意这里是向I2C从机发送地址,所以是写。
4)从机ACK。
5)重新发送起始信号。
6)主机发送要读取的寄存器地址。
7)从机ACK。
8)重新发送起始信号。
9)重新发送要读取的从机地址。
10)读写位。这里是读,表示接下来从I2C从机里读取数据。
11)从机ACK。
12)从机里读到的数据。
13)主机发出NO ACK信号,表示读取完成,不再需要从机发送ACK。
14)主机发出STOP信号,停止I2C通讯。

⑦I2C多字节读时序:时序和单字节一致,只是在读写数据的步骤可以连续发送多个数据。

1.2 I.MX6U的I2C

工作模式:
①快速模式:400Kbits/s
②标准模式:100Kbits/s

I2Cx_IADR(x=1~4)寄存器:I2C地址寄存器。只有ADR(bit7:1)有效,用于保存I2C从机地址,当需要访问某个从机的时候就要把从机设备地址写入ADR。

I2Cx_IFDR(x=1~4)寄存器:I2C分频寄存器。只有IC(bit5:0)有效,用于设置I2C波特率。I2C一般使用IPG_CLK_ROOT=66MHz作为时钟输入。

I2Cx_I2CR(x=1~4)寄存器:I2C控制寄存器。
①IEN(bit7):I2C使能位,为1的时候使能。
②IIEN(bit6):I2C中断使能位,1的时候使能I2C中断。
③MSTA(bit5):主从模式选择,1的时候为主机。
④MTX(bit4):传输方向选择位,0的时候是接收,1的时候是发送。
⑤TXAK(bit3):传输应答使能位。为0发送ACK,为1发送NO ACK
⑥RSTA(bit2):重复开始信号,为1发送restart

I2Cx_I2SR(x=1~4)寄存器:I2C状态寄存器。
①ICF(bit7):数据传输状态位。为0表示数据正在传输,为1表示传输完成。
②IAAS(bit6):为1表示I2C地址,也就是ADR里的从机地址。
③IBB(bit5):I2C总线忙标志位。为0表示I2C总线空闲,为1表示I2C总线忙。
④IAL(bit4):仲裁丢失位。为1表示发生仲裁丢失。
⑤SRW(bit2):从机读写状态位。I2C作为从机的时候使用。用于表明主机发给从机的是读还是写命令。为0表示主机要向从机写数据,为1表示主机要从从机读数据。
IIF(bit1):I2C中断挂起标志位。1的时候表示有中断挂起,该位需要软件清零。这个位可能还有其它效果,NXP没说清楚。
⑦RXAK(bit0):应答信号标志位,为0表示接收到ACK应答信号,为1表示检测到NO ACK信号。

I2Cx_I2DR(x=1~4)寄存器:I2C数据寄存器。只有低八位有效。

1.3 AP3216C

  AP3216C是一个三合一传感器,支持环境光强度ALS(16位输出),接近距离PS(10bit),红外线强度IR。设备地址:0X1E。其具体寄存器设置见驱动手册。
  AP3216C初始化流程如下:先将0X00寄存器(模式控制寄存器)设置为0x04进行软复位,然后选择工作模式。其他几个数据寄存器保存着三个传感器获取到的数据值。注意开机检测的时候要检测芯片外设是否存在,一般芯片都有ID寄存器供查询,但是AP3216C没有,需要向0x00寄存器写入值然后读取值,如果相等的话就说明AP3216C存在。

2. 实验

2.1 配置步骤

1)初始化IO。
2)初始化I2C1,设置波特率。
3)初始化AP3216C,读取数据。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值