#i2c-driver #rp2040 #pio #peripheral #hal #operations #gpio

i2c-pio

使用 RP2040 外设 PIO 实现的 I2C 驱动程序

7 个版本 (破坏性)

0.8.0 2024 年 3 月 16 日
0.7.0 2023 年 9 月 1 日
0.6.0 2023 年 2 月 18 日
0.5.0 2022 年 12 月 11 日
0.1.0 2022 年 1 月 3 日

#1857硬件支持

Download history 136/week @ 2024-04-29 128/week @ 2024-05-06 96/week @ 2024-05-13 71/week @ 2024-05-20 6/week @ 2024-05-27 9/week @ 2024-06-03 16/week @ 2024-06-10 9/week @ 2024-06-17 6/week @ 2024-06-24 6/week @ 2024-07-01 50/week @ 2024-07-08 20/week @ 2024-07-15 2/week @ 2024-07-22 64/week @ 2024-07-29 24/week @ 2024-08-05 15/week @ 2024-08-12

每月 106 次下载
rp-pico 中使用

Apache-2.0

33KB
780

I2C PIO

使用 RP2040 PIO 外设实现 I2C HAL。

有关示例,请参阅 rp-hal


lib.rs:

使用 RP2040 PIO 块实现 I2C 控制器。

此实现基于 c-sdk 的示例,有以下变化

  • 它使用 GPIO 上的 WAIT 处理时钟拉伸,无需将 SCL 设置为 SDA+1。
  • 它保持 autopush 启用并在写入操作期间清空 RX FIFO。

通用命令字描述

TX 编码:| 15:10 | 9 | 8:1 | 0 | | Instr | Final | Data | NAK |

如果 Instr 的值为 n > 0,则此 FIFO 字符没有数据负载,下一个 n + 1 个字将作为指令执行。否则,移出 8 位数据,然后是 ACK 位。

Instr 机制允许处理器编程停止/开始/repstart 序列,然后在数据流的定义点上由状态机执行。

"Final" 字段应设置为传输中的最后一个字节。这告诉状态机忽略 NAK:如果此字段未设置,则任何 NAK 都会导致状态机停止并中断。

应启用 Autopull,阈值为 16。应启用 Autopush,阈值为 8。应使用半字写入访问 TX FIFO,以确保数据立即在 OSR 中可用。

引脚映射

  • 输入引脚 0 是 SDA
  • 跳线引脚是 SDA
  • 侧置引脚 0 是 SCL
  • 设置引脚 0 是 SDA
  • OUT 引脚 0 是 SDA

系统 IO 控制中应将 OE 输出取反!(此程序中可以执行取反,但代价是 2 条指令:1 条用于取反,1 条用于处理 MOV 对 TX 位移计数器的副作用。)

依赖项

~11–20MB
~283K SLoC