I2C问题

[复制链接]
1257|4
 楼主| hsbjb 发表于 2012-6-17 23:23 | 显示全部楼层 |阅读模式
I2c, AC, ck, ST, RS
一般的i2c写操作流程是,start->从设备地址->ack->从设备偏移量->ack->数据1..n->ack->stop

如果我的写函数是
void i2c_wr_byte(uchar Schar)
{

uchar i;

for(i=0;i<8;i++)

{

IIC_SDA = (Schar & 0x80)? 1:0;

somenop;

IIC_SCL = 1;

somenop;

IIC_SCL = 0;

Schar <<= 1;

}

我能否这样进行写操作;
i2c_start();
i2c_wr(0xa0); //从设备地址
i2c_wr(0x00); //从设备偏移量
i2c_wr(0x00); //data0
i2c_wr(0x01);
....
i2c_wr(0xff); //data255
i2c_stop();

我有点搞不清如何处理ack信号,是不是可以忽略,不予考虑。因为他是接收器发送到总线的应答,无论有没有应答,我应该都可以继续一个一个字节进行写操作吧?但为什么protues仿真出来,不能写入24c00(EEPROM),但从I2C debug 工具里能读到数据,但只有第一位数据0xa0是发送正确的,其他都不一样?
 楼主| hsbjb 发表于 2012-6-17 23:29 | 显示全部楼层
最好要收到,如果收不到,也要发出这个CLK
有时候收不到也没关系,我在操作一块128*64的液晶的时候就是死活收不到ACK,但是,不影响继续操作
不过,最好还是要收到
无冕之王 发表于 2012-6-17 23:31 | 显示全部楼层
收到正确的信号然后才执行下一步
dfsa 发表于 2012-6-17 23:42 | 显示全部楼层
如果没有收到应答信号ACK,就不能代表主机与I2C设备已经建立了通信链接,所以要检测一下ACK信号那是必要的。
xsgy123 发表于 2012-6-17 23:50 | 显示全部楼层
应答是需要接收的,你需要通过应答位来判断设备是否已经正确执行了命令
您需要登录后才可以回帖 登录 | 注册

本版积分规则

193

主题

2354

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部