打印

I2C问题

[复制链接]
759|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信号那是必要的。

使用特权

评论回复
5
xsgy123| | 2012-6-17 23:50 | 只看该作者
应答是需要接收的,你需要通过应答位来判断设备是否已经正确执行了命令

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

193

主题

2354

帖子

0

粉丝