首页
  • GM-3568JHF
  • M4-R1
  • M5-R1
  • SC-3568HA
  • M-K1HSE
  • CF-NRS1
  • CF-CRA2
  • 1684XB-32T
  • 1684X-416T
  • C-3568BQ
  • C-3588LQ
  • GC-3568JBAF
  • C-K1BA
商城
  • English
  • 简体中文
首页
  • GM-3568JHF
  • M4-R1
  • M5-R1
  • SC-3568HA
  • M-K1HSE
  • CF-NRS1
  • CF-CRA2
  • 1684XB-32T
  • 1684X-416T
  • C-3568BQ
  • C-3588LQ
  • GC-3568JBAF
  • C-K1BA
商城
  • English
  • 简体中文
  • GM-3568JHF

    • 一、简介

      • GM-3568JHF 简介
    • 二、快速开始

      • 01 环境搭建
      • 02 编译说明
      • 03 烧录指南
      • 04 调试工具
      • 05 软件更新
      • 06 查看信息
      • 07 测试命令
      • 08 应用编译
      • 09 源码获取
    • 三、外设与接口

      • USB
      • 显示与触摸
      • 以太网
      • WIFI
      • 蓝牙
      • TF-Card
      • 音频
      • 串口
      • CAN
      • RTC
    • 四、应用开发

      • 01 UART读写案例
      • 02 按键检测案例
      • 03 LED灯闪烁案例
      • 04 MIPI屏幕检测案例
      • 05 读取 USB 设备信息案例
      • 06 FAN 检测案例
      • 07 FPGA FSPI 通信案例
      • 08 FPGA DMA 读写案例
      • 09 GPS调试案例
      • 10 以太网测试案例
      • 11 RS485读写案例
      • 12 FPGA IIC 读写案例
      • 13 PN532 NFC读卡案例
      • 14 TF卡读写案例
    • 五、QT开发

      • 01 ARM64交叉编译器环境搭建
      • 02 QT 程序加入开机自启服务
    • 六、其他

      • 01 根目录文件系统的修改
      • 02 系统自启服务

12 FPGA IIC 读写案例

1 案例简介

案例功能描述:本案例主要演示如何通过 IIC 通信协议,在 ARM 端实现对 FPGA 寄存器的读写操作。案例基于 Linux 系统的标准 IIC 工具(如 i2cset、i2cget、i2cdetect 等),自定义了测试程序,提供了完整的 IIC 通信测试流程,验证 IIC 通信的正确性。

2.标准 IIC 工具读写FPGA

在IIC通信中,FPGA作为从机,可通过以下指令查看从机地址。如图,其设备地址为0x66。

i2cdetect -r -y -a 0
FPGA_I2C_1

目前代码中定义了三个寄存器地址为0x00、0x01、0x02。其中0x02为只读寄存器。对于0x00寄存器可以测试读写数据是否正确,例如写1,读出来也是1即通信正常。

执行以下命令,向0X00寄存器中写入数值0X40。

i2cset -r -y -a 0 0x66 0x00 0x40
FPGA_I2C_2

执行以下命令,读取寄存器0x00的值,可以看到读出了0x40,和写入的值一致。

i2cget -f -y -a 0 0x66 0x00
FPGA_I2C_4

也可执行以下命令,查看设备所有寄存器的值。

i2cdump -f -y -a 0 0x66
FPGA_I2C_3

其中,0x01寄存器可以控制底板上LED灯的状态。可向0X01寄存器写入数值来控制LED灯的状态。

#点亮
i2cset -f -y -a 0 0x66 0x01 0x01 
#熄灭
i2cset -f -y -a 0 0x66 0x01 0x01

3 案例操作流程

本案例基于Linux系统的标准IIC工具,优化了指令设计,使其更加直观和用户友好。用户可根据需求自行更改源程序。

打开终端,将本案例 bin 目录下(05-开发资料\软件开发资料\linux_demo\smdt_fpga_i2c_demo\bin)的可执行程序 smdt_fpga_i2c 拷贝至开发板文件系统 (源码可以在 src 路径下查看)。

#修改 Linux 内核日志的显示级别,内核的日志级别被设置为只显示紧急或更高级别的消息
echo 1 4 1 7 > /proc/sys/kernel/printk

在终端执行如下指令,切换到 smdt_fpga_i2c 可执行程序所在目录

#切换到 smdt_fpga_i2c 可执行程序所在目录
cd ‘可执行文件所在目录’

#查看 smdt_fpga_i2c 是否在该目录下
ls

若可执行文件 smdt_fpga_i2c 在当前目录下,则修改可执行文件的权限

#修改文件权限
chmod 777 smdt_fpga_i2c 

#查询是否修改成功
ls -ld smdt_fpga_i2c

查询确认文件修改权限成功后,执行 ./smdt_fpga_i2c -h 可以查看该程序的帮助信息


./smdt_fpga_i2c  -h

执行结果如下图:

FPGA_I2C_5

执行以下命令,可对设备寄存器0X00进行读写操作。

#写操作
 ./smdt_fpga_i2c -write 0x00 0x11
 #读操作
  ./smdt_fpga_i2c -read 0x00
FPGA_I2C_7

执行以下命令,可对设备寄存器0X01进行写操作控制底板上LED灯亮灭。

#点亮
  ./smdt_fpga_i2c -led ON
  #熄灭
  ./smdt_fpga_i2c -led OFF
FPGA_I2C_6
在 GitHub 上编辑此页
上次更新:
贡献者: chj
Prev
11 RS485读写案例
Next
13 PN532 NFC读卡案例