SGM58031的IIC接口调试过程

圣邦微电子推出的SGM58031是具有16位分辨率的精密模数转换器(ADC),设计具有高精度、低功耗和易于实现的特点,具有片内基准电压源和振荡器,数据通过兼容I2C的串行接口进行传输。

先来看看SGM58031的IIC接口时序图:

话不多说,直奔主题:

调试主要分为两个模块:

        一个是控制驱动模块进行读写操作,下文中我们简称为控制模块。一个是IIC时序的驱动模块,通过读写操作写入从机地址,读写命令,配置寄存器地址,配置寄存器值,读取寄存器值,下文中我们简称为驱动模块。

       驱动模块是进行读写操作的驱动单元。首先来说写寄存器过程:

       在写操作过程中,当写使能信号出现后,模块开始工作,写入高7位从机地址加1位写使能和24bit的寄存器配置值(寄存器地址8bit+寄存器配置值16bit),这里的24bit寄存器配置值将分化为三个8bit的数据依次写入。

简单来说写操作就是写入高7位从机地址+1位写使能+8位配置寄存器地址+高8位寄存器配置值+低8位寄存器配置值

       上图为一次完整的写操作过程,从图中可以看出在写使能信号i_wr_reg_valid(单脉冲)信号触发后,I2C_58031_dri模块开始写入数据,首先写入高7位从机地址加1位写使能和24bit的寄存器配置数据,将24bit的寄存器配置数据分化为三个8bit的数(r_wr_reg_addr+r_wr_reg_data1+r_wr_reg_data2),分别代表寄存器地址和配置数据高八位、低八位,依次写入后将完成一次写操作过程。

       这次过程中我总共配置了四个寄存器,这里只体现了配置一个寄存器值的全过程,配置另外三个寄存器的过程是一样的。

       接下来说说读寄存器配置过程:

       在读操作过程中,当读使能信号出现后,模块开始工作,首先写入高7位从机地址加1位写使能,然后写入读地址即转换寄存器地址0X00,再写入高7位从机地址加1位读使能,最后读取转换寄存器0X00的高8bit数据和低8bit数据。

简单来说读操作就是写入高7位从机地址+1位写使能+8位转换寄存器地址+高7位从机地址+1位读使能,然后读高8位寄存器数据+读低8位寄存器数据

       上图为一次完整的读操作过程,在图中可以看出,在i_rd_reg_valid(单脉冲)信号触发后,首先写入高7位从机地址加1位写使能,然后写入转换寄存器地址0X00,再写入高7位从机地址加1位读使能,最后读取转换寄存器0X00的高8bit数据和低8bit数据,在读取高八位数据过程中将数据寄存在r_rd_data1中,读取低八位数据时,高八位数据保持不变,低八位数据寄存在r_rd_data2中,当结束读操作时,将高八位和低八位同时输出至16位o_rd_data信号输出端口,同时o_rd_data_valid数据输出有效信号拉高。

        至此读写操作完成。

        有几个地方是比较值得注意的:

        1、读状态我们可以通过判断芯片的ALERT/RDY引脚状态,这里我们通过配置寄存器来配置ALERT/RDY引脚是高电平有效还是低电平有效;

         2、写过程中,配置完高8位寄存器数据之后主机应给一个低电平的应答信号,配置完低8位寄存器数据之后,主机应给一个低电平的应答信号,再给一个高电平的P信号,这样一次配置写寄存器过程才算是结束。(关于这一点,我之前在配置完高8位寄存器数据数据之后,就给了一个高电平的应答信号,这导致我读出来的寄存器数据的低8位是FF)。

希望这篇帖子对各位小伙伴调试SGM58031有所帮助。

  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值