前段时间写了一个I2C的程序,模拟I2C从机,现在功能都已经实现了,但在调试中遇到的一个问题现在也还是没有搞清楚。
在verilog程序里面我写了一个计数器,来判断接受或者发送数据的bit位,最开始时是利用SCL的边沿来计数的,可发现使用SCL的边沿来计数的话计数器老是会出现问题,如一个沿计数两次等,后来查了资料,说必须用一个高速时钟来采样SCL,再判断两次采样的值来判断SCL的边沿,这种方法的确解决了问题,但我疑惑的是到底为什么不能使用SCL自身的边沿来计数呢?
还希望曾经遇到过一样的问题的高手指点一二,谢谢! |