i2c简单时序关系
平时clk sda都为高电平
当clk为高,sda发生一次下降沿,触发开始信号
然后由clk的高电平期间采样 SDA数据,在clk高时候需要保持SDA
先发送7位地址和一位读写标志(所以i2c地址一般是7位的),然后接收端回一个ACK
然后发送8位reg地址,回一个ACK
然后就是数据
都是8位一组发送的
d a0 s3c24xx_i2c_init
c e1 s3c24xx_i2c_clockrate
6 e1 s3c24xx_i2c_enable_irq
50 d0 s3c24xx_i2c_message_start
7 e1 s3c24xx_i2c_message_start
51 f0 s3c24xx_i2c_message_start
9 e1 i2c_s3c_irq_nextbyte
50 90 s3c24xx_i2c_message_start
7 f1 s3c24xx_i2c_message_start
51 b0 s3c24xx_i2c_message_start
9 e1 i2c_s3c_irq_nextbyte
9 e1 i2c_s3c_irq_nextbyte
9 e1 i2c_s3c_irq_nextbyte
9 e1 i2c_s3c_irq_nextbyte
1 71 s3c24xx_i2c_disable_ack
9 61 i2c_s3c_irq_nextbyte
52 91 s3c24xx_i2c_stop
4 51 s3c24xx_i2c_disable_irq
9 41 i2c_s3c_irq_nextbyte
第二次
6 41 s3c24xx_i2c_enable_irq
50 d0 s3c24xx_i2c_message_start
7 e1 s3c24xx_i2c_message_start
51 f0 s3c24xx_i2c_message_start
9 e1 i2c_s3c_irq_nextbyte
50 90 s3c24xx_i2c_message_start
7 f1 s3c24xx_i2c_message_start
51 b0 s3c24xx_i2c_message_start
9 e1 i2c_s3c_irq_nextbyte
9 e1 i2c_s3c_irq_nextbyte
9 e1 i2c_s3c_irq_nextbyte
9 e1 i2c_s3c_irq_nextbyte
1 71 s3c24xx_i2c_disable_ack
9 61 i2c_s3c_irq_nextbyte
52 91 s3c24xx_i2c_stop
4 51 s3c24xx_i2c_diable_irq
9 41 i2c_s3c_irq_nextbyte
第一次出错
6 41 s3c24xx_i2c_enable_irq
50 d0 s3c24xx_i2c_message_start
7 e1 s3c24xx_i2c_message_start
51 f0 s3c24xx_i2c_message_start
1 61
52 d1 s3c24xx_i2c_stop
4 41 s3c24xx_i2c_diable_irq
最后重置下GPIO口解决
感觉i2c在异常被下拉后,无法恢复