atom100 发表于 2014-1-14 08:36:42

写一个i2c控制器,难道i2c的 数据不是 时钟边沿取数据吗?

写一个i2c控制器,看到 i2c协议,如下图 这样,难道i2c的 数据不是 在时钟边沿取数据吗?


sme 发表于 2014-1-14 09:25:33

用SCL的下降沿取。

其实如果用高电平取,也没问题,最后锁存的数据也是下降沿时刻的数据。只是这样latch的数据会可能会有毛刺而已。

atom100 发表于 2014-1-14 11:06:35

本帖最后由 atom100 于 2014-1-14 11:17 编辑

噢,感谢,
但我看 iic的协议,严格来讲 是在 scl高电平 时候的某个 位置 采集数据,而且没说是 哪个位置,看着 不是在 scl下降沿 取数据sda?而数据sda的变化是在时钟的 低电平的中点位置

对比 SPI总线,spi总线的数据变化 可以在时钟的 下降沿变化,而 iic协议sda数据变化 不能在时钟的边沿上。
按协议来讲 iic的数据变化时刻 不能在 时钟的上升沿吧?像下图这样,应该不是完全符合iic协议吧 ,数据在时钟的上升沿变化,?iic协议的数据变化应在时钟的 低电平中点位置,这样的话,写verilog的 代码 就有店麻烦了



iic的协议我看应该 是时钟有个位移,像下面这样 向后位移1/4时钟周期


aikimi7 发表于 2014-1-14 12:46:19

本帖最后由 aikimi7 于 2014-1-14 12:47 编辑

I2C数据变化在时钟低电平期间,不是说一定是低电平的中点。
另外,你说的数据不能在上升沿变化,其实和仿真激励类似,可以理解为此上升沿变化的数据在下一个时钟沿有效。

atom100 发表于 2014-1-14 14:01:54

本帖最后由 atom100 于 2014-1-14 14:09 编辑

请看 这个文章,说的是否正确 ?
http://hi.baidu.com/narshben/item/0ec93b1c373cd7f087ad4ee2





红线部分 ,三线制是 边沿触发,而二线制是 电平触发,我看很多资料写fpga接收i2c数据,都是写成下降沿锁存数据, 如果完全按 i2c 协议写verilog代码 接收数据,是不是 不能写成下降沿锁存数据??
如果 verilog 写成上升沿改变sda数据(用于发送数据),而下降沿锁存sda的数据(用于接收数据),这样与 arm等单片机内 硬件实现的i2c模块之间通信,是否会出问题 ??

页: [1]
查看完整版本: 写一个i2c控制器,难道i2c的 数据不是 时钟边沿取数据吗?