这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 快速IIC模式

共6条 1/1 1 跳转至

快速IIC模式

菜鸟
2008-08-06 15:40:28     打赏
在使用快速IIC时遇到的问题,获取SLAVE的ACK应答时出错。
程序如下:
void I2C_TXDATA(void)
{
    ...
    mov.b #8,R0H
    Tx8: shl.b   #1,R0L   //移最高位入C
    jc     BitHi                   //判断高位是否为1,是则跳转到BitHi
   BitLo: bclr SDA,00E5H                     //SDA拉低
   jmp BitEnd
   BitHi: bset SDA,00E5H                      //SDA拉高
   BitEnd:
            nop
            bset SCL,00E5H                          //SCL拉高
            nop               ......// 10个nop
            bclr SCL,00E5H                           //SCL拉低
            nop
            nop
            dec.b R0H                              //不为0则跳转到Tx8
            jne Tx8
  ackn:
          nop
          nop
          nop
           bset SDA,00E5H                      //SDA拉高,Master
           bclr  SDA,00E7H                       //SDA设置为输入
           bclr  SCL,00E5H                       //允许Slave改变SDA
           nop ........                                      // 18个nop
//此时看SDA的电平为高,也就是说ACK返的是NG.           
           bset  SCL,00E5H
           nop.......                                       //10个nop
           bclr   SCL,00E5H                       //SDA发生改变需要的脉冲
           nop
           nop
           nop
          bset  SDA,00E5H
...............
}

只发送一个byte数据时返回的ACK为OK的,但由于要发送多个判断,C语言当中要进行判断字节数,所以到发送第二个字节时ACK就NG了。问题怎么解决?



关键词: 快速     模式    

菜鸟
2008-08-06 15:48:49     打赏
2楼

时钟频率为20M,也就是说一个NOP执行时间为0.05us。
10个nop为0.5us。再加上bset,bclr的执行周期为3,是满足快速IIC的协议的。


菜鸟
2008-08-06 15:57:04     打赏
3楼
bclr SCL,00E5H                           //SCL拉低
            nop
            nop
            dec.b R0H                              //不为0则跳转到Tx8
            jne Tx8
在判断R0H 已经为0的时候是否需要设置SCL为高,即不允许Slave改变数据。

菜鸟
2008-08-06 16:54:02     打赏
4楼

速度多快?100k?高速IIC,用I/O口来模拟的话,的确不好控制,如果你对IIC的通讯速度有苛刻的要求,可以试一下硬件IIC。R8C的1A/1B、24/25等系列都有硬件IIC功能。


助工
2008-08-06 17:01:08     打赏
5楼
CISC指令集单片机用软件延时不准确的
MOV指令的执行周期在软件手册中为3个指令周期
可实际上要比这个数大几倍呢
比如10MHz下,MOV指令(RAM到RAM的寻址)的完成实际要1us左右,是手册中周期的3倍多

菜鸟
2008-08-07 09:34:28     打赏
6楼

还不是高速模式。
快速模式,IIC传送速率最大能达到400kbits/s。
看IIC协议上说的,好像是能向下兼容的,也就是说标准模式也是使用快速模式的。
但是,标准模式 对音频模块好使,但对收音模块却有问题。
这两天一直查不明白。


共6条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]