目录
send(address, data, length, option=0)
receive(address, data, length, option=0)
“IIC(Inter-Integrated Circuit)是IICBus的简称,中文名为集成电路总线。它是一种串行通信总线,使用多主从架构,由飞利浦公司在1980年代为了让主板、嵌入式系统或手机用以连接低速周边设备而发展。”
说起这个协议,大家肯定是十分熟悉的啦,通常我们有两种方法来实现IIC:
- GPIO模拟控制
- 专用的硬件结构控制
本节我们要讲的AxiIIC IP核是通过AXI总线来控制的一个实现IIC通信协议的IP核 ,类似AxiGPIO IP。
IIC协议详解
这部分主要写给新手朋友看,主要是一些关于IIC协议的基本知识
IIC的控制协议
IIC协议是一个半双工的串行通信协议,有两条信号线,使用时需要上拉:
- SCL:该信号线负责传输时钟信号,由发送主机控制
- SDA:该信号线负责传输数据信号,由发送主机控制
数据有效
当SCL为高电平时,SDA应该保持不变,并且此时SDA的信号即为有效,当SCL为低电平时,SDA才可以改变。
传输起始信号
当SCL为高电平时,SDA出现下降沿。
传输停止信号
当SCL为高电平时,SDA出现上升沿。
应答&&非应答信号
当传输完前8bit数据后,主机将释放数据线(此时由于上拉,默认SDA为高电平),此时从机将拉低SDA信号线,代表数据接收成功。
当主机为接收端时,接收完一字节数据后,在第9bit时,如果发出非应答(NACK)信号,那么指示数据接收完成,可以停止了。
综上所述,非应答信号有可能是主机发送,也有可能是从机发送,但其中不变的是,如果想继续接收数据,那么就应答,不接收了就非应答,这是相对接收和应答的。
IIC传输协议
控制协议确保了每次传输,每个数据都能被正常准确接收,传输协议则规定了一种读写的规范。
写传输
写传输总结起来就是:“设备地址 + N个传输数据”
上面的图片展示了主机写从机寄存器的例子,主机发送起始信号,先传输一字节的地址信息。这里我们注意,地址信息共有7bit,最后1bit表征对这个设备进行读还是写操作。
这个例子的格式为“设备地址 + 写/读的寄存器地址 + 写/读的数据”
读传输
类似写传输,格式总结起来是“设备地址 + N个传输的数据”
上面给的传输例子,其总结起来的步骤是:
- 设备地址
- 要读的寄存器地址
- 设备地址(上面两部相当于指定好了设备的寄存器,接下来开始读)
- 读取的数据
当主机认为读取要结束时,发送一个非应答信号,指示从机停止发送,并且主机开始接管总线,并且发送停止信号。
Axi IIC IP核详解
当我们使用了Axi IIC IP核之后,我们就不需要关心协议的具体实现过程了,我们在PS通过调用Xilinx官方提供的接口,来完成数据的发送与接收。
实例化Overlay中的Axi IIC对象后我们需要重点关注三个方法:
send(address, data, length, option=0)
- address是IIC从设备的地址
- data是需要发送的数据,我们传入的常常为一个数组
- length是传输数据的字节数
- option参数默认为0,代表不使用重复传输,相反,如果等于1则使能
receive(address, data, length, option=0)
- address是IIC从设备的地址
- data是需要接收数据的保存仓库,我们传入的常常为一个数组
- length是传接收的字节数
- option参数默认为0,代表不使用重复传输,相反,如果等于1则使能
waite()
该方法的作用是等待传输完成。
本文结束~