当前文档版本为 v0.9.0,您可以访问当前页面的 开发中 版本以获取最近可能的更新。

Driver: I2C Slave

1 功能概述

`i2c_slave sample`演示了Zephyr I2C Driver在PAN1080 SoC上的使用方法,主要包括:
  • I2C Slave 配置

  • 配置 I2C Slave 地址,读取 I2C数据并保存

  • 配置 I2C Slave 地址,写入读到的 I2C数据

  • (可选) 通过逻辑分析仪抓取I2C数据观测

2 配置说明

  • prj.conf为默认配置,DMA未使能

  • prj_dma.conf为DMA使能配置

    CONFIG_I2C_PANCHIP_DMA_DRIVEN: 使能DMA feature

    CONFIG_I2C_PANCHIP_DMA_TIMEOUT为DMA:操作时的超时时间(未及时触发DMA中断),单位为ms。

3 环境要求

  • PAN1080 EVB 一块

  • USB-TypeC 线一条(用于供电和查看串口打印 Log)

  • (可选)Saleae16 Logic Analysis与配套软件Logic 2.3.50

  • 硬件接线:

    • 使用 USB 线,将 PC USB 与 EVB USB-TypeC(USB->UART)相连

    • 根据 EVB 核心板芯片的封装不同,使用杜邦线将 EVB 底板上的:

      • TX0 与 P30 相连

      • RX0 与 P31 相连

      • I2C Master P01 与 Slave P01 相连,I2C Master P00 与 Slave P00 相连(若 EVB 板芯片为 QFN32 或 LQFP64 封装)

      • I2C Master P40 与 Slave P40 相连,I2C Master P041 与 Slave P41 相连(若 EVB 板芯片为 QFN48 封装)

      • (可选)Master P01(或P40) 与 逻辑分析仪 SDA channel 相连,Master P00(或P41) 与 逻辑分析仪 SCL channel 相连,并且 EVB 与 Logic Analysis GND 相连

  • PC 软件: 串口调试助手(UartAssist)或终端工具(SecureCRT),波特率921600

4 编译和烧录

例程位置:zephyr\samples_panchip\driver\i2c\i2c_slave

使用 ZAL 工具可以对其进行编译、烧录、打开 VS Code 调试等操作。关于 ZAL 工具的详细介绍请参考:Zephyr APP Launcher 工具介绍

5 演示说明

  • 连线

      运行脚本`quick_build_samples\i2c_slave.bat`,编译后进行烧录至 pan108xxb5_evb
    
      之后将master P01(I2C SDA)与slave端P01进行连接,master P00(I2C SCL)与slave端P00进行连接
    
      有额外条件还可将P01,P00与逻辑分析仪2个channel进行连接,GND与逻辑分析仪GND连接后,开始抓数据
    

I2C Master

I2C Slave

Logic Analyzer

P01(I2C SDA)

P01(I2C SDA)

CH0 SDA

P00(I2C SCL)

P00(I2C SCL)

CH1 SCL

GND

GND

  • Sample执行流程:

    • 配置I2C为Slave 模式,并配置标准速率模式

    • 指定I2C Slave地址并读取16B数据

    • 将读取到的16B数据保存打印,并通过I2C Write发送全部16B数据

    • 进行I2C Slave的下载并复位,打开串口,之后进行I2C master的下载

    • 观察读出的数据是否与master发送的数据一致

    Slave端收转发,Master端发转收,完成I2C Master对I2C Slave的读写操作

  • 打印slave收到的master写入数据

   datas[0] = 0
   datas[1] = 1
   datas[2] = 2
   datas[3] = 3
   datas[4] = 4
   datas[5] = 5
   datas[6] = 6
   datas[7] = 7
   datas[8] = 8
   datas[9] = 9
   datas[10] = 10
   datas[11] = 11
   datas[12] = 12
   datas[13] = 13
   datas[14] = 14
   datas[15] = 15
  • 逻辑分析仪示例数据:抓取了从写开始到写到终止,到读开始到读终止

    image

    I2C读写波形1

    image

    I2C读写波形2

    image

    I2C读写波形3

6 开发说明

6.1 I2C Kconfig

使用I2C时,需要使能I2C指定宏

CONFIG_I2C=y

6.2 I2C API

I2C使用包括:获取I2C设备;配置I2C基础模式;配置读/写进行通信操作

相关底层实现存在于zephyr\drivers\i2c\i2c_panchip.c

6.2.1 通过 label 获取 DTS I2C

const struct device *i2c_dev = DEVICE_DT_GET(DT_NODELABEL(i2c0));

6.2.2 配置I2C速率与Slave模式

uint32_t i2c_cfg = I2C_SPEED_SET(I2C_SPEED_STANDARD)
i2c_configure(i2c_dev, i2c_cfg)

6.2.3 I2C Slave Addr Receive

i2c_read(i2c_dev, datas, 16, SLAVE_I2C_ADDR);

6.2.4 I2C Slave Addr Write

i2c_write(i2c_dev, datas, 16, SLAVE_I2C_ADDR);

6.3 补充说明

目前i2c可以演示i2c通信功能,但实际的i2c slave功能完整实现需要借助真实i2c slave设备,完善panchip作为i2c controller对i2c slave的控制。

7 RAM/Flash资源使用情况

Memory region         Used Size  Region Size  %age Used
FLASH:       23156 B       256 KB      8.83%
SRAM:        4480 B        64 KB      6.84%