EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 Tronlong小分队 于 2020-10-28 14:04 编辑 7 _; P& P, I5 ^/ _
2 J1 m4 ?3 a# J5 l0 n, l& N h1.1 I2C通信核心板简介本案例主要基于创龙科技的AM4376/AM4379 ARM Cortex-A9 + XilinxSpartan-6 FPGA处理器设计的异构多核工业级核心板进行讲解:
3 z8 h m6 E8 q. R8 o2 I: {# h创龙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 图 2
3 y# B1 a' N# a: ~2 F& {& {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 - f% X3 s" v" A8 Y# Z6 l* _) n f
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image006.jpg 图 3 3 ]' A" S* m( C7 p; ~! }7 m
执行如下命令进行用户可读写寄存器0x00的读写测试。 Target#i2cset -f -y 0 0x2a 0x00 0x55 //往寄存器0x00写0x55 Target#i2cget -f -y 0 0x2a 0x00 //读取寄存器0x00,值为0x55 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image008.jpg
/ S( ?3 R+ Y* V% X8 U3 C
图 4
( X. R% v& l5 G( [+ n执行如下命令进行LED寄存器0x01的写测试,实现FPGA端LED的亮灭控制。 Target#i2cset -f -y 0 0x2a 0x01 0xe0 //往LED寄存器0x01写0xe0,点亮FPGA端LED5、LED6、LED7 Target#i2cset -f -y 0 0x2a 0x01 0x00 //往LED寄存器0x01写0x00,熄灭FPGA端LED5、LED6、LED7 $ f& P- d, T0 ?. S2 w$ o
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image010.jpg 图 5 & l: h$ Q, y2 N# u6 F6 A% H
执行如下命令进行KEY寄存器0x02的读测试,实现FPGA端KEY的状态检测。 Target#i2cget -f -y 0 0x2a 0x02 //读取KEY寄存器0x02,值为0xe0 & n. J2 q8 I* t$ V) b* `; M
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image012.jpg 图 6
% Q; w9 P3 o! O0 n. H 按下FPGA端按键KEY6并保持按下状态,再执行如下命令。 Target#i2cget -f -y 0 0x2a 0x02 //读取KEY寄存器0x02,值为0xc0
7 q, n1 Z2 Q6 I9 x! [' lfile:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image014.jpg 图 7 " ]) D' }& H% f. ?# B; t1 E
按下FPGA端按键KEY7并保持按下状态,再执行如下命令。 Target#i2cget -f -y 0 0x2a 0x02 //读取KEY寄存器0x02,值为0xa0 0 T# v; \2 W; t1 x" u. c
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image016.jpg 图 8 0 L3 R5 c5 C; G% Z* F
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。 5 z- f. Z4 G5 G2 `9 _5 T, @9 [, l/ l
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image018.jpg 图 9hdl/i2c_test.v
+ I7 x& f* F& K/ M' `(2) 输出100MHz时钟给I2C Slave模块。
- S, [2 w- f6 hfile:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image020.jpg 图 10hdl/i2c_test.v & ^3 }0 [+ F$ o0 f) f! _
(3) 调用I2C Slave模块。
, M4 B( o! d( L' ~2 s1 Vfile:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image022.jpg 图 11hdl/i2c_test.v 1 j* x4 ^# l5 O& {' n; j$ o4 x9 s
I2C Slave模块程序来源参考:https://opencores.org/projects/i2cslave。 (4) 根据LED寄存器的值控制LED,并将KEY状态值保存至KEY寄存器。 ( e: ]& }9 D; D4 z. Q4 _! r! [
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image024.jpg 图 12hdl/i2c_test.v
$ F9 x8 C/ m4 x(5) 设置I2C Slave地址为0x2a。 L" s) s* A* U$ R& ?
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image026.jpg 图 13hdl/i2cslave/i2cSlave_define.v ! ^" y) h! v1 y y7 [8 r* W
RTL原理图如下所示: & c, M) O; g6 S2 @
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image028.jpg 图 14 % S. b i- k- o
|