5703|18

73

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

有人用HDL做I2C通信吗? [复制链接]

学习板上的PCF8563睡了几个月觉了。准备练练它。
此帖出自FPGA/CPLD论坛

最新回复

  我的意思是说,我也不知道32-63之间状态机在做什么,没看懂它的作用。   对于你的第二个问题,好吧,我刚才也没认真看,没有注意到它的赋值使用“=”。那对于这个阻塞跟非阻塞赋值上我们就不过多讨论了,上面说那么多我的意思主要是想表达说,ack1就是从机对于地址的响应,它的值就是从机发过来的响应的值。同理ack2,就是从机对于上一个数据(也就是从机对sub_addr的响应)的响应值,ack3同理。。。 [ 本帖最后由 linhaiqing60 于 2010-10-13 11:47 编辑 ]  详情 回复 发表于 2010-10-13 11:40
点赞 关注
 

回复
举报

531

帖子

0

TA的资源

一粒金砂(高级)

沙发
 

回复 楼主 andyandy 的帖子

我正在调试IIC通信呢,还没有调好,一起调试吧
此帖出自FPGA/CPLD论坛
 
 

回复

6892

帖子

0

TA的资源

五彩晶圆(高级)

板凳
 

好好调吧,IIC 程序代码编写有一定的挑战。如果实在搞不定,可以找我!!!!!!!!!!!!!!

此帖出自FPGA/CPLD论坛
个人签名一个为理想不懈前进的人,一个永不言败人!
http://shop57496282.taobao.com/
欢迎光临网上店铺!
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

4
 

有战友,有老师

高兴!!!
此帖出自FPGA/CPLD论坛
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

5
 

回复 沙发 ming1005 的帖子

能说说你的I2C器件是什么吗?
PCF8563是时钟芯片。
此帖出自FPGA/CPLD论坛
 
 
 

回复

68

帖子

0

TA的资源

纯净的硅(初级)

6
 
我做过i2c验证和主机模式的编写,有什么不懂得大家可以讨论下。。。。。

[ 本帖最后由 linhaiqing60 于 2010-10-8 16:04 编辑 ]
此帖出自FPGA/CPLD论坛
 
 
 

回复

531

帖子

0

TA的资源

一粒金砂(高级)

7
 

回复 5楼 andyandy 的帖子

at24c04器件不重要,通信协议都是一样的,我有程序仿真通过的,到时一直都没有硬件测试,有时间我会传上来的,
此帖出自FPGA/CPLD论坛
 
 
 

回复

115

帖子

0

TA的资源

一粒金砂(中级)

8
 

回复 楼主 andyandy 的帖子

根据通信协议,可以用状态机的方式实现,相对不太难
此帖出自FPGA/CPLD论坛
个人签名心寂寂,念休休,沉沙无意却成洲,一生治学当如此,只计耕耘莫问收。
 
 
 

回复

531

帖子

0

TA的资源

一粒金砂(高级)

9
 

回复 8楼 chinatiger11 的帖子

状态机真的很好用,我想问下有没有别的编程思想呢?
此帖出自FPGA/CPLD论坛
 
 
 

回复

68

帖子

0

TA的资源

纯净的硅(初级)

10
 

回复 9楼 ming1005 的帖子

硬件描述语言的精髓就是状态机,用其他的方法描述的话感觉没那么简练,效果也没那么好,各个信号在时序上的先后顺序也不容易描述清楚,个人感觉还是状态机好。
此帖出自FPGA/CPLD论坛
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

11
 

咱不擅长状态机,咱只用计数器

计数器很好用,简单,一目了然。

[ 本帖最后由 andyandy 于 2010-10-11 15:20 编辑 ]
此帖出自FPGA/CPLD论坛
 
 
 

回复

115

帖子

0

TA的资源

一粒金砂(中级)

12
 
原帖由 ming1005 于 2010-10-9 00:28 发表 状态机真的很好用,我想问下有没有别的编程思想呢?

不用状态机去做应该也是可以实现的,但效果估计不太好。状态机的代码易读,易维护,为什么不用状态机呢?
此帖出自FPGA/CPLD论坛
个人签名心寂寂,念休休,沉沙无意却成洲,一生治学当如此,只计耕耘莫问收。
 
 
 

回复

68

帖子

0

TA的资源

纯净的硅(初级)

13
 

回复 11楼 andyandy 的帖子

只用计数器综合出来效果不好,时序上也不好优化
此帖出自FPGA/CPLD论坛
 
 
 

回复

27

帖子

0

TA的资源

一粒金砂(初级)

14
 
不知道有没有人研究过altrea开发板DE1上的I2C程序,有几个问题我还没吃透,不知我直接发程序上来大家介不介意.....一起学习!
http://www.myfpga.org/discuz/vie ... e=0&page=1#pid70321
我把问题发到那边的一个帖子上了,但没人回复。。。如果想自己先编下程序的呢,就先不要看这个帖子了
此帖出自FPGA/CPLD论坛
 
 
 

回复

68

帖子

0

TA的资源

纯净的硅(初级)

15
 

原帖由 shinexqq 于 2010-10-12 21:48 发表 不知道有没有人研究过altrea开发板DE1上的I2C程序,有几个问题我还没吃透,不知我直接发程序上来大家介不介意.....一起学习! http://www.myfpga.org/discuz/viewthread.php?tid=133&rpid=70321&ordertype=0&page=1 ...

 

对于你的第一个问题,我也还没看明白,先回答第二个问题吧。

 

首先,从代码上看这个代码应该是i2c主机模式的代码。你再认真看一下datasheet,i2c中,主机向从机发送任何数据(包括地址),从机在接受到之后都要有响应,而这个响应就是在数据最后一位结束后产生的。

 

现在解释一下响应的作用,主机在向从机发送数据后,如果从机没有返回任何信息的话,主机是不知道从机有没有接受到刚才发送的这个数据,因此为了让主机知道从机到底有没有接收到,就用这个响应信号来通知主机。即当主机发送完地址,从机在接收到这个地址(并且确认是自己的从机地址之后),从机就要发送一个响应信号来通知主机让主机知道从机已经接收到了(如果没有接收到,从机就不会发送这个响应信号)。同样的,主机发送完一个8位数据,从机在接收到之后也会有响应信号。

 

接下来再看这段代码,wire I2C_SDAT=SDO?1'bz:0 ;在结合源程序中,每次传输8位数据后有一个SDO=1'b1;可以知道当sdo等于一时,i2c_sdat为高阻态,这个时候i2c_sdat的值就等于输入值(因为i2c-sdat是I/O口,当i2c-sdat为高阻态时,它就是一个输入口),也就是从机发送过来的数值。然后再结合这句 6'd12  : begin SDO=SD[15]; ACK1=I2C_SDAT; end   ,于是ack1就等于之前一个周期的i2c_sdat的输入值,也就是状态‘ 11’6'd11 : SDO=1'b1;时从机发送过来的值,而这个从机发送过来的值是在主机发送完地址后发送的,也就是从机对地址的一个响应信号。于是ack2,ack3可以以此类推。



 

此帖出自FPGA/CPLD论坛
 
 
 

回复

27

帖子

0

TA的资源

一粒金砂(初级)

16
 

感谢你在两边都作了详细的回答,既然是这边的网友,咱就在这讨论好了。 我的第一个问题的意思是,程序发数据用的是case (SD_COUNTER)这个语句来执行发数的,下面的case只有0-32,而SD_COUNTER的计数是到6'b111111(即63)了才重新从0开始计的。这样应该在33-63计数器在空跑的,不知道是什么意思

 

二、对于从机应答我看懂了。还有点不明白的是:结合这句 6'd12 : begin SDO=SD[15]; ACK1=I2C_SDAT; end ,于是ack1就等于之前一个周期的i2c_sdat的输入值,也就是状态‘ 11’6'd11 : SDO=1'b1。。。。。

 

我原来理解是:在这里他用的是“=”号,ACK1读到的是SD[15]的值,如果这样写6'd12 : begin ACK1=I2C_SDAT;  SDO=SD[15];end 我能理解。。。为什么说“ack1就等于之前一个周期的i2c_sdat的输入值”呢?

[ 本帖最后由 shinexqq 于 2010-10-13 11:04 编辑 ]
此帖出自FPGA/CPLD论坛
 
 
 

回复

68

帖子

0

TA的资源

纯净的硅(初级)

17
 

原帖由 shinexqq 于 2010-10-13 11:00 发表 感谢你在两边都作了详细的回答,既然是这边的网友,咱就在这讨论好了。 我的第一个问题的意思是,程序发数据用的是case (SD_COUNTER)这个语句来执行发数的,下面的case只有0-32,而SD_COUNTER的计数是到6'b111111(即 ...

 

我的意思是说,我也不知道32-63之间状态机在做什么,没看懂它的作用。

 

对于你的第二个问题,好吧,我刚才也没认真看,没有注意到它的赋值使用“=”。那对于这个阻塞跟非阻塞赋值上我们就不过多讨论了,上面说那么多我的意思主要是想表达说,ack1就是从机对于地址的响应,它的值就是从机发过来的响应的值。同理ack2,就是从机对于上一个数据(也就是从机对sub_addr的响应)的响应值,ack3同理。。。

[ 本帖最后由 linhaiqing60 于 2010-10-13 11:47 编辑 ]
此帖出自FPGA/CPLD论坛
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

18
 

应答的作用

从机忙时,即使是接收到了正确的数据,也不应答。

应答是发射机在发送完一个字节后,紧接着主机再发一个时钟脉冲用来判断应答,而接收机需要在该时钟周期拉低数据线即SDA。

无论接收什么内容,应答都是拉低,不应答则要拉高。 

 

[ 本帖最后由 andyandy 于 2010-10-13 13:06 编辑 ]
此帖出自FPGA/CPLD论坛
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

19
 

14楼到17楼的两位兄弟

不谋全局不足谋一域。有些细节,不看上层是看不懂的。
此帖出自FPGA/CPLD论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表