zcu102_17_PS通过I2C接口读写外设寄存器

根据 ug1182,zcu102 板卡上 PS 连接 2 个 I2C 接口,分别是 I2C0(MIO 14-15) 和 I2C1(MIO 16-17)。

本试验使用 I2C1 通过 zcu102 板卡的 FMC HPC1 接口连接外设,PS 作为 I2C Master,外设作为 I2C Slave。

I2C 接口说明

由于 PS 程序通过 API 封装函数使用 I2C 接口,因此本文不再详述 I2C 接口时序,仅描述 I2C 通信原理。

I2C 由 SCL 和 SDA 2 条双向接口连接 Master 和 Slave,一般情况下是 1 个 Master 连接多个 Slave,以字节(8 bit)为单位传输数据。

每个 Slave 通过自身配置 (内部寄存器或者外部管脚连接)的 Slave Address(或称片选地址),供 Master 在多个 Slave 中选择 1 个通信对象。

片选地址一般情况下为 7 bit,在其最低位补上 1 bit 的读写标记位,就构成1次读或写传输中 I2C Master 向 Slave 发送的首个字节,在 Master 收到对应片选地址 Slave 的正常响应后,Master 或者 Slave 向对方发送数据。由于 Master 主控传输流程,具体传输数据内容的解析根据 Slave 的内部逻辑决定。

需要特别注意:片选地址在 Xilinx 的相关文档及 PS API 函数中都被定义为前述的 7 bit 数值,而在许多外设的手册中 I2C 片选地址被描述为最低位补 1 bit 0 值的8 bit 字节。例如外设手册中的片选地址 0x20,在 PS API 函数中应当使用 0x20>>1 作为片选地址。

I2C 写流程

字节数据的解析根据 Slave 的内部逻辑决定,一般情况是前几个字节是写入数据的寄存器地址,后几个字节是写入对应寄存器的数据;对于只有单个寄存器的 Slave 外设或者处理流数据的外设,发送的字节数据中没有地址。具体应当参考外设手册。

  1. Master 发送写标记的片选字节,并得到 Slave 的响应。
  2. Master 向 Slave 发送若干字节数据。

注意:放多外设手册甚至 Xilinx 文档都容易混淆片选地址和寄存器地址,区分的方法是在描述 I2C 接口时使用的 Address 一般是指片选地址,寄存器地址完全是 Slave 的内部逻辑功能与 Master 无关。

I2C 读流程

读流程由 Slave 内部逻辑决定,以下流程仅针对一般情况下的寄存器数据读取。

  1. Master 发送写标记的片选字节,并得到 Slave 的响应。
  2. Master 向 Slave 发送读寄存器地址的字节数据。
  3. Master 发送读标记的片选字节,并得到 Slave 的响应。
  4. Master 等待接收 Slave 返回的对应寄存器地址读出的字节数据。

zcu102 I2C1 的路由控制

根据 ug1182 的说明,PS 的 I2C1 接口通过 I2C 路由芯片 TCA9548A 实现单个 Master 接口对多个 Slave 的路由。

在这里插入图片描述
路由配置及外设地址如下表所示:

在这里插入图片描述

上表中的 Addr 和 Address 全部指片选地址。至于 FMC HPC_0 和 FMC HPC_1 的 0x## 地址,表示片先地址由连接该 FMC 接口的 Slave 外设自身配置决定。

参考路由芯片 TCA9548A 的手册说明,该芯片仅有单个 8 bit 寄存器,由低位至高位的数值 1 分别表示 Table 3-24 中对应 Slave 的连通,比如连接 FMC HPC_1,可以使用下图所示的配置:

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值