查看: 920|回复: 0

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

[复制链接]
  • TA的每日心情
    开心
    2021-2-20 09:01
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2020-10-27 13:07:26 | 显示全部楼层 |阅读模式
    分享到:
    干货分享|基于AM4376/79 ARM+FPGAI2C通信案例分享1.1                 I2C通信核心板简介
    本案例主要基于创龙科技的AM4376/AM4379 ARM Cortex-A9 + XilinxSpartan-6 FPGA处理器设计的异构多核工业级核心板进行讲解:
    创龙SOM-TL437xF是一款基于TI Sitara系列AM4376/AM4379 ARM Cortex-A9 + Xilinx Spartan-6 FPGA处理器设计的异构多核工业级核心板。核心板内部AM437x与Spartan-6通过GPMC、I2C通信总线连接。通过工业级B2B连接器引出LCD、CAMERA、GPMC、CAN等接口。核心板经过专业的PCB Layout和高低温测试验证,稳定可靠,可满足各种工业应用环境。
    用户使用核心板进行二次开发时,仅需专注上层运用,降低了开发难度和时间成本,可快速进行产品方案评估与技术预研。
    图片1.png
    图 1
    图片2.png
    图 2
    1.2                 I2C通信案例功能
    案例功能:在FPGA端实现I2C Slave,并内置用户可读写寄存器、LED寄存器、KEY寄存器。ARM端作为Master,可通过核心板内部与FPGA连接的I2C0接口读写FPGA端I2C Slave用户可读写寄存器0x00,LED写寄存器0x01点亮或熄灭FPGA端LED(写1则点亮,写0则熄灭),查看KEY寄存器0x02检测FPGA端KEY状态。
    1.3                 I2C通信操作说明
    将产品资料“4-软件资料\Demo\FPGA\i2c_slave\bin\i2c_test_6slx16.bit”可执行程序加载至FPGA端。进入评估板文件系统后,执行如下命令可查看到I2C0总线上的挂载设备,其中0x2a为FPGA端I2C Slave的地址。
    Target#        mkdir/configfs
    图片3.png
    图 3
    执行如下命令进行用户可读写寄存器0x00的读写测试。
    Target#        i2cset -f -y 0 0x2a 0x00 0x55          //往寄存器0x000x55
    Target#        i2cget -f -y 0 0x2a 0x00                  //读取寄存器0x00,值为0x55
    图片4.png
    图 4
    执行如下命令进行LED寄存器0x01的写测试,实现FPGA端LED的亮灭控制。
    Target#        i2cset -f -y 0 0x2a 0x01 0xe0          //LED寄存器0x010xe0,点亮FPGALED5LED6LED7
    Target#        i2cset -f -y 0 0x2a 0x01 0x00          //LED寄存器0x010x00,熄灭FPGALED5LED6LED7
    图片5.png
    图 5
    执行如下命令进行KEY寄存器0x02的读测试,实现FPGA端KEY的状态检测。
    Target#        i2cget -f -y 0 0x2a 0x02           //读取KEY寄存器0x02,值为0xe0
    图片6.png
    图 6
           按下FPGA端按键KEY6并保持按下状态,再执行如下命令。
    Target#        i2cget -f -y 0 0x2a 0x02           //读取KEY寄存器0x02,值为0xc0
    图片7.png
    图 7
           按下FPGA端按键KEY7并保持按下状态,再执行如下命令。
    Target#        i2cget -f -y 0 0x2a 0x02           //读取KEY寄存器0x02,值为0xa0
    图片8.png
    图 8
    1.4                 I2C通信管脚约束
    FPGA端管脚约束请查看产品资料“4-软件资料\Demo\FPGA\i2c_slave\project\i2c_slave_6slx16\constraints\i2c_test.ucf”文件。
    1.5                 I2C通信关键代码
    (1)   定义I2C、LED、KEY、时钟IO。
    图片9.png
    图 9hdl/i2c_test.v
    (2)   输出100MHz时钟给I2C Slave模块。
    图片10.png
    图 10hdl/i2c_test.v
    (3)   调用I2C Slave模块。
    图片11.png
    图 11hdl/i2c_test.v
    I2C Slave模块程序来源参考:https://opencores.org/projects/i2cslave
    (4)   根据LED寄存器的值控制LED,并将KEY状态值保存至KEY寄存器。
    图片12.png
    图 12hdl/i2c_test.v
    (5)   设置I2C Slave地址为0x2a。
    图片13.png
    图 13hdl/i2cslave/i2cSlave_define.v
    RTL原理图如下所示:
    图片14.png
    图 14


    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-4-25 18:32 , Processed in 0.114391 second(s), 18 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.