ZYNQ 嵌入式裸机开发之IIC

1、编写目的

       整理IIC开发流程。本次设计实现使用 PS 端的 I2C 控制来完成对 EEPROM 芯片的读写。由于芯片位于拓展板上,属于 PL 侧资源,因此,我们需要通过 EMIO 将 PS 端的I2C 控制器接口信号路由到 PL。为了确保设计成功完成了对 EEPROM 的读写,我们将向 EEPROM 指定寄存器地址中写入一串自加的数据,并读回比较。通过对比写入和读出数据是否一致来判断读写是否成功,并通过串口, 打印出判断结果。

2、IIC控制器框图

 

 用户通过 APB 总线对 I2C 控制器进行交互;22

3、IIC接口 

 

 I2C 分为软件 I2C 和硬件 I2C:

软件 I2C:软件 I2C 通信指的是通过两个 I/O 端口模拟出来的 I2C,用软件控制管脚状态以模拟 I2C 通信波形,软件模拟寄存器的工作方式。
硬件 I2C:一块硬件电路,硬件 I2C 对应芯片上的 I2C 外设,有相应 I2C 驱动电路,其所使用的 I2C 管脚也是专用的,硬件(固件) I2C 是直接调用内部寄存器进行配置。硬件 I2C 的效率要远高于软件的,而软件 I2C 由于不受管脚限制,接口则比较灵活。

4、IIC通信原理

4.1、主机和从机概念

     主机负责整个系统的任务协调与分配,从机一般是通过接收主机的指令从而完成某些特定的任务,主机和从机之间通过总线连接,进行数据通讯。主机往总线上发送地址,所有的从机都能接收到主机发出的地址,然后每个从机将主机发送的地址与自己的地址比较,如果匹配上,这个从机就会向总线发出一个响应信号。主机收到响应信号后,开始向总线上发送数据。

     I2C 通信原理是通过对 SCL 和 SDA 线高低电平时序的控制,来产生 I2C 总线协议所需要的信号进行数据的传递。在总线空闲状态时, SCL 和 SDA 被上拉电阻拉高,使 SDA 和 SCL 线都保持高电平。 I2C 通信方式为半双工,只有一根SDA 线,同一时间只可以单向通信。
 

5、IIC读写时序

5.1起始信号

当时钟线 SCL 为高电平期间,数据线 SDA 电平由高到低的跳变为起始信号
 

5.2结束信号
 

 当所有数据都发送完成时, 主机将产生一个停止条件。停止条件定义为:在 SDA 置于低电平时,将 SCL 拉高并保持高电平,然后将 SDA 拉高。

 5.3应答信号

 I2C 总线上的所有数据都是以 8 位字节传送的,发送器每发送一个字节,就在第 9 个时钟脉冲期间释放数据线,由接收器反馈一个应答信号。应答信号为低电平时,规定为有效应答位(ACK 简称应答位),表示接收器已经成功地接收了该字节;应答信号为高电平时,规定为非应答位(NACK),一般表示接收该字节没有成功

5.4数据发送

        在 I2C 总线上传送的每一位数据都有一个时钟脉冲相对应(或同步控制),即在 SCL串行时钟的配合下,在SDA 上逐位地串行传送每一位数据。进行数据传送时,在 SCL 呈现高电平期间,SDA上的电平必须保持稳定,低电平为数据 0,高电平为数据 1。只有在 SCL为低电平期间,才允许SDA上的电平改变状态 

5.5IIC写时序

上图为1 字节地址段器件和 2 字节地址段器件单字节写时序图

 上图为为 1 字节地址段器件和 2 字节地址段器件连续多字节写时序图

5.6IIC读时序 

 

 

上图分别为 1 字节地址段器件单字节数据读操作和 2 字节地址段器件单字节数据读操作时序图

 

 上图分别为 1 字节地址段器件和 2 字节地址段器件连续多字节读时序图

6.PS侧软件程序设计

1、在PL搭建硬件系统,生成.hdf文件

2、在SDK中进行软件程序开发

下面重点简述在SDK软件程序开发:

1、查找IIC设备

2、初始化IIC设备

3、设置IIC串行时钟频率

4、将数据写入EEPROM中

5、读取EEPROM数据

6、对比写入读取数据是否相同

7、串口打印结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值