赞
踩
某些情况下,ARM部分的MIO引脚不足或者冲突时,或者硬件设计失误,可以考虑使用EMIO访问外设。
Emio_i2c1_scl_i
Emio_i2c1_scl_o
Emio_i2c1_scl_t
Emio_i2c1_sda_i
Emio_i2c1_sda_o
Emio_i2c1_sda_t
常规思维下,设计中ZU4CG始终为主设备,则可能直接输出Emio_i2c1_scl_o至外部引脚,通过IOBUF将Emio_i2c1_sda_i、Emio_i2c1_sda_o、Emio_i2c1_sda_t连接至双向引脚。这是错误的!
经过实测,Emio_i2c1_scl_o始终输出低电平!(因此使用ILA测试时,无法测到iic时钟输出)正确的做法是也通过IOBUF将Emio_i2c1_scl_i、Emio_i2c1_scl_o、Emio_i2c1_scl_t连接至双向引脚。
I2C 协议中,SCL与SDA两根线,通过外部上拉呈现高电平。当ZYNQ IP核需要将SCL设置为低电平时,其将Emio_i2c1_scl_t拉低,输出Emio_i2c1_scl_o,此时双向端口SCL拉低;当需要将SCL设置为高电平时,Emio_i2c1_scl_t拉高,此时借助于外部上拉电路,将SCL拉高。
由此可见,在IIC协议中,主设备仅驱动SCL与SDA变为低电平,其余情况下不进行驱动,默认由外部上拉电路将SCL与SDA拉高。
PS.若因为某种原因,硬件电路中没有将SCL与SDA进行上拉,需要FPGA对引脚进行上拉约束。
set_property PULLUP true [get_ports emio_iic_scl]
set_property PULLUP true [get_ports emio_iic_sda]
(若IIC主从设备均为FPGA实现,则均需要进行上拉约束)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。