美文网首页
i2c协议笔记

i2c协议笔记

作者: 窝窝蜗牛 | 来源:发表于2021-05-25 10:35 被阅读0次

    camera sensor与主控芯片是通过i2c通信的,摄像头读id,初始化寄存器,开启流,写曝光都是通过i2c总线来控制的,接下来我们研究下开启相机后i2c都做了哪些操作。

    企业微信截图_16213863016568.png

    先通过网上的资料大概看下i2c的通信规则,简单说明下:i2c通信只需要两条传输线,一条数据线SDA,一条时钟线SCL,SCL拉高,SDA下降沿表示一个传输的起始信号,SCL为高时读取数据,有8 bit的数据位,后面跟着一个ACK位,表示应答信号。SCL拉高,SDA上升沿表示一个结束信号。8 bit数据如果是地址的话,前7 bit表示i2c从地址,最后一个表示方向(R/W)。数据传输期间,SDA位只允许在SCL为低时发生改变,SCL为高时必须稳定。

    下面是测量的信号,使用示波器测量的时候要记得接地,否则测量的波形是呈波浪形的,不好分析,接地后呈方块形:


    image.png

    可以看出默认待机状态下SDA和SCL都处于高电平状态。分析第一帧数据:


    c8f11ee7790fb4c1520198508b572c82.jpg
    蓝色信号表示SCL,黄色信号表示SDA,SCL高,SDA下降沿表示开始,第一个数据读出是00100000,0x20,表示i2c地址为0x10,方向为写,然而我们驱动中配置的i2c地址一般都是加上了读写方向的i2c地址,也即是0x20,实际i2c地址应该右移一位,去掉方向位。地址后面紧跟一位0(ACK应答信号),是由从设备拉低的,表示从机接收到了主机信号。当sensor未上电成功时,该位为0,表示从机未响应,也就没有后续寄存器地址数据传输了。后续数据分别为0x20,0x30,0x0b.
    839a08d4bd8f10c220d11f315eb11741.jpg

    在写入一个地址后,SCL保持低电平状态,应该是在等待从机回复数据,上面是回复帧,第一个数据0x21,表示读数据,后面跟着数据0x75,最后的应答位为1,表示数据读取结束。前面两帧数据读出来是start->0x20->ack(0)->0x30->ack(0)->0x0b->ack(0)->end 回复start->0x21->ack(0)->0x56->ack(1)->end start->0x20->ack(0)->0x30->ack(0)->0x0c->ack(0)->end 回复start->0x21->ack(0)->0x75->ack(1)->end.


    企业微信截图_1621405477441.png
    查看代码,刚好符合identify的流程。后续的操作就是初始化寄存器组,stream on了。

    相关文章

      网友评论

          本文标题:i2c协议笔记

          本文链接:https://www.haomeiwen.com/subject/onjqsltx.html