【分析笔记】全志平台 TWI 上拉电压异常的问题
记录说明
原本这么简单的芯片,没有必要做记录,后来发现其中有一颗单独挂在 TWI2 无法通信,而主要原因是最容易忽视的电源域的问题,因此记录一下这件事情。
芯片介绍
MCP3021 是一颗 10BIT 的 ADC 器件,直接通过 I2C 读取两个字节的数据即可获取到 10BIT 的数值。
分析过程
内核版本:Linux version 4.9.56
幸得全志在线的 Syter 提醒了一下,不然估计还得捣鼓一阵,在此感谢 Syter:
- 使用 i2cdetect -y 2 无法检测到芯片,意味着无法通信。
- TWI2 与其它 TWI 的一样都是通过 10K 上拉到 3.3V,但是测量发现只有 TWI2 是 1.5V。
- 通过手动设置 PE14\PE15 为 GPIO 口模式,并设置输入,测量只有 1.5V。
- 通过手动设置 PE14\PE15 为 GPIO 口模式,并设置输出高电平,测量只有 1.2V。
- 拆除唯一一颗挂在 TWI2 上面的 MCP3021A5T-E 芯片,测试结果和上面一样。
- 后发现 TWI2 与 TWI0\TWI1 唯一不同的是不 TWI2 属于 PE 组,其它共属 PH 组。
- 测量 PE 组 GPIO 的电源域,只有 1V 左右,通过设置并使能 3.3V VCC-PE,测量上拉电压正常。
- 经过测试,可以正常通信,问题得到解决,PE 组没有供电,测量的 1V 应该是通过上拉电阻串进去的电。
如何使能指定组的 GPIO 电源域,取决于实际电路从哪取的电源,如果是 PMU 的某一路电源,只需启用该路电压并设置为 1003300 即可,如:
[power_sply]
......
gpio1_vol = 1003300
应用方法
一、确认器件地址
| 型号 | 器件地址 |
|---|---|
| MCP3021A0T-E | 0x48 |
| MCP3021A1T-E | 0x49 |
| MCP3021A2T-E | 0x4A |
| MCP3021A3T-E | 0x4B |
| MCP3021A4T-E | 0x4C |
| MCP3021A5T-E | 0x4D |
| MCP3021A6T-E | 0x4E |
| MCP3021A7T-E | 0x4F |
二、启用 I2C 控制器
[twi2]
twi2_used = 1
twi2_scl = port:PE14<3><default><default><default>
twi2_sda = port:PE15<3><default><default><default>
[twi2_suspend]
twi2_scl = port:PE14<7><default><default><default>
twi2_sda = port:PE15<7><default><default><default>
三、命令行测试验证
数据读取:
root@localhost:~# i2ctransfer -y -f 0 r2@0x4d
0x01 0x2c
数据解析:
1. 高字节:0x01 --> 0000 0001 --> 取低四位:0001
2. 低字节:0x2c --> 0010 1100 --> 取高六位:0010 11
3. 合并字节:0001 0010 11 --> 0001001011 --> 75
4. 换算电压:75 * 3.3 / (2^10) = 0.24V 与万用表测量电压基本一致。
【分析笔记】全志平台 TWI 上拉电压异常的问题的更多相关文章
- 移动端实现上拉加载更多(使用dropload.js vs js)
做下笔记,:移动端实现上拉加载更多,其实是数据的分段加载,在这里为了做测试我写了几个json文件作为分段数据: 方式一:使用dropload.js; 配置好相关参数及回调函数就可使用:代码如下 var ...
- 搭建ELK日志分析平台(上)—— ELK介绍及搭建 Elasticsearch 分布式集群
笔记内容:搭建ELK日志分析平台(上)-- ELK介绍及搭建 Elasticsearch 分布式集群笔记日期:2018-03-02 27.1 ELK介绍 27.2 ELK安装准备工作 27.3 安装e ...
- 用mescroll实现无限上拉增加数据,下拉刷新数据 (学习笔记)
最近自己做一个web app需要用到上拉查询下页数据,网上看了很多很多帖子,发现并不能快速的套用,总是会出现各种问题无法使用,于是无奈自己跑去看了官方api文档,终于做了出来,至此做个笔记,以后用到可 ...
- Flutter学习笔记(25)--ListView实现上拉刷新下拉加载
如需转载,请注明出处:Flutter学习笔记(25)--ListView实现上拉刷新下拉加载 前面我们有写过ListView的使用:Flutter学习笔记(12)--列表组件,当列表的数据非常多时,需 ...
- 【学习笔记】js下拉刷新、上拉加载 mescroll框架的使用
写在前边: 工作需要,使用ajax在原来的列表下边使用ajax请求后台数据,拼接在列表最下边,在github转了好久,发现了一个bug极多的js刷新插件,尝试了一个下午,就在快放弃的时候,发现下边有留 ...
- 【Arduino学习笔记06】上拉电阻和下拉电阻
为什么要用上拉电阻和下拉电阻?--避免输入引脚处于"悬空"状态 下图是一个没有使用上拉电阻/下拉电阻的电路图: 在按键没有按下时,要读取的输入引脚没有连接到任何东西,这种状态就称为 ...
- Spark大型项目实战:电商用户行为分析大数据平台
本项目主要讲解了一套应用于互联网电商企业中,使用Java.Spark等技术开发的大数据统计分析平台,对电商网站的各种用户行为(访问行为.页面跳转行为.购物行为.广告点击行为等)进行复杂的分析.用统计分 ...
- zeromq源码分析笔记之线程间收发命令(2)
在zeromq源码分析笔记之架构说到了zmq的整体架构,可以看到线程间通信包括两类,一类是用于收发命令,告知对象该调用什么方法去做什么事情,命令的结构由command_t结构体确定:另一类是socke ...
- 关于51单片机IO引脚的驱动能力与上拉电阻
单片机的引脚,可以用程序来控制,输出高.低电平,这些可算是单片机的输出电压.但是,程序控制不了单片机的输出电流. 单片机的输出电流,很大程度上是取决于引脚上的外接器件. 单片机输出低电平时,将允许外部 ...
- C#构造方法(函数) C#方法重载 C#字段和属性 MUI实现上拉加载和下拉刷新 SVN常用功能介绍(二) SVN常用功能介绍(一) ASP.NET常用内置对象之——Server sql server——子查询 C#接口 字符串的本质 AJAX原生JavaScript写法
C#构造方法(函数) 一.概括 1.通常创建一个对象的方法如图: 通过 Student tom = new Student(); 创建tom对象,这种创建实例的形式被称为构造方法. 简述:用来初 ...
随机推荐
- ML-梯度下降法的详细推导与代码实现
计算 对于线性回归,梯度下降法的目标就是找到一个足够好的向量\(\theta\),使代价函数\(J(\theta) = \sum_{i=1}^{m}(\hat{y}-y_{i})^{2}\)取得最小值 ...
- 苹果 App Store 开始支持隐藏上架应用:只能通过链接下载
据MacRumors报道,苹果公司最近宣布,正如其开发者网站上所概述的那样,App Store现在支持只能通过直接链接才能发现的隐藏应用. 图片来自 Apple 拥有不适合公开发布的应用的开发 ...
- CSS 动画一站式指南
CSS 动画一站式指南 目录 CSS 动画一站式指南 1. CSS 动画 1.1 变换 1.1.1 变换属性介绍 1.1.2 变换动画实践 1.2 过渡 1.2.1 过渡属性介绍 1.2.2 过渡动画 ...
- java代码整洁之道
package Day01;import org.junit.Test;import java.text.NumberFormat;import java.util.Scanner;public cl ...
- spalsh安装及简单使用
selenium是浏览器测试自动化工具,很容易完成鼠标点击,翻页等动作,确定是一次只能加载一个页面,无法异步渲染页面,也就限制了selenium爬虫的抓取效率. splash可以实现异步渲染页面,可以 ...
- [C++] - GCC和LLVM对方法 warning: non-void function does not return a value [-Wreturn-type] 的处理差异
最近做一个C++开源项目发现一个奇怪问题,通过clang编译链接执行程序每到有一个就崩溃了,gcc下则没有此问题. 后来通过调试,发现原因是bool返回的方法是没有return语句!问题是为啥还能通过 ...
- mybatis-plus分页失效原因
mybatis-plus分页失效解决方法 方法一.在启动类添加如下配置 @SpringBootApplication @MapperScan("com.**.mapper") pu ...
- 【Android逆向】rpc调用某安App的X-App-Token签名函数
阅读此文档的过程中遇到任何问题,请关注公众号[移动端Android和iOS开发技术分享]或加QQ群[309580013] 1.目标 在学习的过程中,会遇到有些算法比较麻烦,没有办法直接还原.那我们就另 ...
- 为什么Linux需要虚拟内存 [转载好文]
操作系统中的 CPU 和主内存(Main memory)都是稀缺资源,所有运行在当前操作系统的进程会共享系统中的 CPU 和内存资源,操作系统会使用 CPU 调度器分配 CPU 时间1并引入虚拟内存系 ...
- MySQL空间暴涨150G导致锁定,发生了什么
背景 12月1号中午突然收到大量报警,某客户环境操作数据库大量失败,报错信息如下图所示: 这个报错我是第一次见,一时间有点无所适从,但是从字面意思来看是MySQL目前处于LOCK_WRITE_GROW ...