MyFPGA Forum

 找回密码
 注册
搜索
查看: 13453|回复: 10
打印 上一主题 下一主题

de2 demo 中I2C_Controller 问题

[复制链接]
1#
发表于 2010-10-13 10:32:17 | 显示全部楼层
对于你的第一个问题,我也还没看明白,先回答第二个问题吧。







首先,从代码上看这个代码应该是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可以以此类推。
2#
发表于 2010-10-13 10:32:53 | 显示全部楼层
这个历程中还有两个地方不懂
一、状态机只到32,为什么计数是SD_COUNTER < 6'b111111 (十进制63)。。
二 ...
shinexqq 发表于 2010-10-9 11:36


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

首先,从代码上看这个代码应该是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可以以此类推。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|MyFPGA

GMT+8, 2024-5-3 12:40 , Processed in 0.049864 second(s), 14 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表