草庐IT

SGM58031的IIC接口调试过程

发光猫 2023-11-26 原文

圣邦微电子推出的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位寄存器数据之后,主机再给一个高电平的应答信号,这样一次配置写寄存器过程才算是结束。(关于这一点,我之前在配置完高8位寄存器数据数据之后,就给了一个高电平的应答信号,这导致我读出来的寄存器数据的低8位是FF)。

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

有关SGM58031的IIC接口调试过程的更多相关文章

  1. ruby-on-rails - 无法让 rspec、spork 和调试器正常运行 - 2

    GivenIamadumbprogrammerandIamusingrspecandIamusingsporkandIwanttodebug...mmm...let'ssaaay,aspecforPhone.那么,我应该把“require'ruby-debug'”行放在哪里,以便在phone_spec.rb的特定点停止处理?(我所要求的只是一个大而粗的箭头,即使是一个有挑战性的程序员也能看到:-3)我已经尝试了很多位置,除非我没有正确测试它们,否则会发生一些奇怪的事情:在spec_helper.rb中的以下位置:require'rubygems'require'spork'

  2. ruby - JetBrains RubyMine 3.2.4 调试器不工作 - 2

    使用Ruby1.9.2运行IDE提示说需要gemruby​​-debug-base19x并提供安装它。但是,在尝试安装它时会显示消息Failedtoinstallgems.Followinggemswerenotinstalled:C:/ProgramFiles(x86)/JetBrains/RubyMine3.2.4/rb/gems/ruby-debug-base19x-0.11.30.pre2.gem:Errorinstallingruby-debug-base19x-0.11.30.pre2.gem:The'linecache19'nativegemrequiresinstall

  3. ruby-on-rails - 如何调试 cucumber 测试? - 2

    我有:When/^(?:|I)follow"([^"]*)"(?:within"([^"]*)")?$/do|link,selector|with_scope(selector)doclick_link(link)endend我打电话的地方:Background:GivenIamanexistingadminuserWhenIfollow"CLIENTS"我的HTML是这样的:CLIENTS我一直收到这个错误:.F-.F--U-----U(::)failedsteps(::)nolinkwithtitle,idortext'CLIENTS'found(Capybara::Element

  4. postman接口测试工具-基础使用教程 - 2

    1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,

  5. ruby - Ruby 是否有类似于 Perl 的 "perl -d"的逐步调试器? - 2

    Ruby是否有逐步调试器,类似于Perl的“perl-d”? 最佳答案 ruby-debug(对于ruby1.8),debugger(对于ruby1.9),byebug(对于ruby​​2.0)以及trepanning系列都有一个-x或--trace选项。在调试器内部,命令setlinetrace将打开或关闭线路跟踪。这是themanualforruby-debug原来的答案已经修改,因为数据噪声文章的链接,唉,不再有效了。还添加了ruby​​-debug的后继者 关于ruby-Ruby

  6. ruby - Ruby 中的 block 和过程 - 2

    我已经开始学习Ruby,我已经阅读了一些教程,甚至还买了一本书(“ProgrammingRuby1.9-ThePragmaticProgrammers'Guide”),我遇到了一些以前从未见过的新东西使用我知道的任何其他语言(我是一名PHP网络开发人员)。block和过程。我想我明白它们是什么,但我不明白的是为什么它们如此伟大,以及我应该在何时何地使用它们。我到处都看到他们说block和过程是Ruby中的一个很棒的特性,但我不理解它们。这里有人能给像我这样的Ruby新手一些解释吗? 最佳答案 block有很多好处。电梯演讲:bloc

  7. Simulink方法总结和避坑指南(一)——Simulink入门与基本调试方法 - 2

    文章目录一、项目场景二、基本模块原理与调试方法分析——信源部分:三、信号处理部分和显示部分:四、基本的通信链路搭建:四、特殊模块:interpretedMATLABfunction:五、总结和坑点提醒一、项目场景  最近一个任务是使用simulink搭建一个MIMO串扰消除的链路,并用实际收到的数据进行测试,在搭建的过程中也遇到了不少的问题(当然这比vivado里面的debug好不知道多少倍)。准备趁着这个机会,先以一个很基本的通信链路对simulink基础和相关的debug方法进行总结。  在本篇中,主要记录simulink的基本原理和基本的SISO通信传输链路(QPSK方式),计划在下篇记

  8. ruby-on-rails - 使用 Pow 作为服务器在 RubyMine 中调试 - Ruby 2.1.1 + Rails 4 - 2

    我已经开始使用RubyMine6。我正在处理Rails4、Ruby2.1.1项目。我无法找到如何使用Pow作为服务器调试到RubyMine。你能给我指明正确的方向吗? 最佳答案 我能够使用远程调试从RubyMine进行调试。我正在使用RubyMine6、Rails3、Ruby2.1.1。首先创建一个.powenv文件并添加:exportRUBY_DEBUG_PORT=1234exportPOW_WORKERS=1将以下gem添加到您的Gemfile:gem'ruby-debug-ide'gem'debase'创建一个新的初始化器st

  9. ruby-on-rails - 放置调试语句 - 2

    当我编写代码时,我非常频繁地使用“puts”语句进行调试。它允许我查看服务器中发生的情况。在调试代码的时候,不知道是什么原因,我把这些“puts”语句去掉了。这是个好主意还是我应该保留它们以使我的服务器日志更加清晰? 最佳答案 您应该使用记录器而不是puts。使用这种语句:Rails.logger.debug"DEBUG:#{self.inspect}#{caller(0).first}"ifRails.logger.debug?如果您想(几乎)实时查看调试,只需在另一个终端窗口中使用tail命令:tail-Flog/develop

  10. ruby-on-rails - Rails 在记录 200 OK 后在做什么? (调试响应时间慢) - 2

    我试图在我的RubyonRails应用程序中调试一个极其缓慢的请求调用。我已设法根据自己的喜好优化Controller方法,Rails的日志告诉我它已在XX毫秒内完成操作(Completed200OKin5049ms(Views:34.9ms|ActiveRecord:76.3ms)).但是,在加载页面时,在浏览器中实际呈现任何内容之前打印此消息很长;最多约15秒的等待时间。Rackmini-profiler证实了这一点,告诉我GET操作(不计算完成Controller操作所花费的时间)花费了14秒左右。(分析器还确认Controller操作的执行时间约为5秒)。我可以接受Contro

随机推荐