干货分享|基于AM4376/79 ARM+FPGA的I2C通信案例分享

举报
tronlong小分队 发表于 2020/10/27 15:16:28 2020/10/27
【摘要】 干货分享|基于AM4376/79 ARM+FPGA的I2C通信案例分享1.1 I2C通信核心板简介本案例主要基于创龙科技的AM4376/AM4379 ARM Cortex-A9 + Xilinx Spartan-6 FPGA处理器设计的异构多核工业级核心板进行讲解: 创龙SOM-TL437xF是一款基于TI Sitara系列AM4376/AM4379 ARM...

干货分享|基于AM4376/79 ARM+FPGAI2C通信案例分享

1.1                  I2C通信核心板简介

本案例主要基于创龙科技的AM4376/AM4379 ARM Cortex-A9 + Xilinx Spartan-6 FPGA处理器设计的异构多核工业级核心板进行讲解:

 

创龙SOM-TL437xF是一款基于TI Sitara系列AM4376/AM4379 ARM Cortex-A9 + Xilinx Spartan-6 FPGA处理器设计的异构多核工业级核心板。核心板内部AM437xSpartan-6通过GPMCI2C通信总线连接通过工业级B2B连接器引出LCDCAMERAGPMCCAN等接口核心板经过专业的PCB Layout和高低温测试验证,稳定可靠,可满足各种工业应用环境。

用户使用核心板进行二次开发时,仅需专注上层运用,降低了开发难度和时间成本,可快速进行产品方案评估与技术预研。


1

2

 

1.2                  I2C通信案例功能

案例功能:在FPGA端实现I2C Slave,并内置用户可读写寄存器、LED寄存器、KEY寄存器。ARM端作为Master,可通过核心板内部与FPGA连接的I2C0接口读写FPGAI2C Slave用户可读写寄存器0x00LED写寄存器0x01点亮或熄灭FPGALED(写1则点亮,写0则熄灭),查看KEY寄存器0x02检测FPGAKEY状态。

1.3                  I2C通信操作说明

将产品资料4-软件资料\Demo\FPGA\i2c_slave\bin\i2c_test_6slx16.bit”可执行程序加载至FPGA端。进入评估板文件系统后,执行如下命令可查看到I2C0总线上的挂载设备,其中0x2aFPGAI2C Slave的地址。

Target#        mkdir /configfs

 


3

 

执行如下命令进行用户可读写寄存器0x00的读写测试。

Target#        i2cset -f -y 0 0x2a 0x00 0x55          //寄存器0x000x55

Target#        i2cget -f -y 0 0x2a 0x00                  //读取寄存器0x00值为0x55

 


4

 

执行如下命令进行LED寄存器0x01的写测试,实现FPGALED的亮灭控制。

Target#        i2cset -f -y 0 0x2a 0x01 0xe0          //LED寄存器0x010xe0,点亮FPGALED5LED6LED7

Target#        i2cset -f -y 0 0x2a 0x01 0x00          //LED寄存器0x010x00熄灭FPGALED5LED6LED7

 


5

 

执行如下命令进行KEY寄存器0x02的读测试,实现FPGAKEY的状态检测。

Target#        i2cget -f -y 0 0x2a 0x02           //读取KEY寄存器0x02,值为0xe0

 


6

 

       按下FPGA端按键KEY6并保持按下状态,再执行如下命令。

Target#        i2cget -f -y 0 0x2a 0x02           //读取KEY寄存器0x02,值为0xc0

 


7

 

       按下FPGA端按键KEY7并保持按下状态,再执行如下命令。

Target#        i2cget -f -y 0 0x2a 0x02           //读取KEY寄存器0x02,值为0xa0

 


8

 

1.4                  I2C通信管脚约束

FPGA端管脚约束请查看产品资料“4-软件资料\Demo\FPGA\i2c_slave\project\i2c_slave_6slx16\constraints\i2c_test.ucf”文件。

1.5                  I2C通信关键代码

(1)    定义I2CLEDKEY、时钟IO

 

9 hdl/i2c_test.v

 

(2)    输出100MHz时钟给I2C Slave模块。

 

10 hdl/i2c_test.v

 

(3)    调用I2C Slave模块。

 

11 hdl/i2c_test.v

 

I2C Slave模块程序来源参考:https://opencores.org/projects/i2cslave

(4)    根据LED寄存器的值控制LED,并将KEY状态值保存至KEY寄存器。

 

12 hdl/i2c_test.v

 

(5)    设置I2C Slave地址0x2a

 

13 hdl/i2cslave/i2cSlave_define.v

 

RTL原理图如下所示:

 

14

 


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。