IPQ4028开启I2C功能
0 概述
IPQ4028是一款集约式4核心ARM7 SOC芯片,内嵌独立双频WiFi子系统,offload式,支持MU-MIMO,最高支持1.2Gbps。标准的官方Demo方案中,IPQ4019开启了I2C功能,但IPQ4028/4018等未启用。
2 启用方法
qcom-ipq40xx.dtsi文件中定义了2个I2C接口:i2c0和i2c1,所以我们无需更改此文件,仅需要更改子板的dtsi文件即可。
1 修改dtsi文件
在qcom-ipq40xx-ap.dk01.1.dtsi中(IPQ4028子方案用这份dtsi),在@soc域,基于“wps_pins”定义,增加一份“i2c_0_pins”定义,基于datasheet文档,其pins需要固定为"gpio58"和"gpio59"(建议硬件不要改这2个gpio,否则要改动N多地方,且不一定能成功);function固定为“blsp_i2c0”。
再参考qcom-ipq40xx-ap.dk04.1.dtsi中的“i2c_0: i2c@78b7000”定义,将此段的内容全拷贝到qcom-ipq40xx-ap.dk01.1.dtsi中“usb2: usb2@6000000”定义的下边,然后s删除“i2c_0”中具体从设备定义。如果是复杂的I2C从设备,则这里要添加与你的目标从设备相匹配的定义。
2 开启驱动
make menuconfig ->"Kernel modules"->"I2C support",将“kmod-i2c-core”,“kmod-i2c-algo-bit”,“kmod-i2c-gpio”和“kmod-i2c-gpio-custom”选中进内核;
make kernel_menuconfig->"Device Drivers"->"I2C support"->"I2C Hardware Bus support"链中,"I2C support"和"I2C_MSM_V2"选中进内核。
3 测试代码
到http://blog.csdn.net/zjy900507/article/details/78838404拷贝此热心人士的I2C测试代码,利用现有的交叉编译工具链,独立编译为i2ctest即可,该i2ctest可直接在IPQ4028硬件平台上运行。
3 硬件修改
将IPQ4028的gpio58,59割出或引出来后,可以直接飞线到I2C从设备Demo板的SCL和SDA上,利用i2ctest程序直接进行控制;如果是从设备已直接贴到AP的PCBA上,则需要确认从设备IC的SCL和SDA引脚已被同一个电源线拉高(从事射频开发硬件工程师不一定会关注这些细节,所以一定要自己检测是否拉高到3.3V-5.0V间;同时,建议I2C从设备的VCC引脚不要与SCL/SDA共用同一条电源线,也不要将SCL和SDA分布在2条电源线上。后者也许是个案问题,我这边调试的时候,硬件工程师开始的时候将SCL脚拉高到VCC脚,SDA脚拉高到另一个电源线,死活不通;后来更换了一块板子,将SCL/SDA拉高到同一个电源线,且与VCC脚分开,就一切都正常了。可能硬件工程师有不同的理解,在用模拟器控制从设备Demo板成功,但却始终控制不了同一PCBA上的从设备时,可以找另一个硬件工程师,让他按本文建议,重新飞下线,肯定是个不错的调试方法)。
4 配套测试工具
到X宝上买一个USB式的逻辑分析仪,大概百元以内即可。因为示波器你只能看到大概波形,而逻辑分析仪可以更直观,特别是它具有I2C控制器功能,可以直接控制从设备,可以对抓到的信号进行I2C解码,非常好用。也许你的从设备供应商会不断强调示波器的好处,你只要能抓到正确的波形,就是用一个百元以内的软示波器就足够了。
5 验证
在固件编译完后,烧录到硬件平台上,可以看到/dev/i2c-0,则表明固件是正常的;然后上载i2ctest工具到设备上,试着写从设备的寄存器、读从设备的寄存器,如果逻辑仪上显示波形正确,则一切正常;将所有控制寄存器都写完,就可以看到从设备的正常反应了;反之,如果AP设备的串口出现NACK或ERROR字样,则表明I2C总线、从设备或I2c与从设备间通信出了问题。
一旦出现问题,建议用逻辑分析仪所自带的I2C控制器对从设备直接控制,确认从设备没有问题后再通过i2ctest进行联合调试。最常见的问题是:
1)从设备损坏;2)未正常上拉;3)VCC电压异常波动;4)从设备地址错误。
这里要强调一下,抓包i2c-msm-v2驱动时,会发现从设备的地址比datasheet所述左移了1bit,这个是正常的。如果你将从设备地址右移1bit以便这里的打印地址与datasheet的保持一致,那么就肯定会得到NACK提示。
6 其它
我已经在此硬件平台上利用ET6326 IC成功调出了3色呼吸灯。呼吸灯效果虽然你可以用GPIO-PWM式调出,但增加一个专门的IC来负责LED,可以做出更稳定、且不耗费主机性能。同时,基于此I2C总线,我们可以增加温感、湿感以及PM2.5传感器,从而扩展WiFi 设备的功能。
感谢ET6236供应商、研发厂家的大力协助。若您需要用到呼吸灯效果,建议采用ET6236或该公司的其它IC,主要是技术支持非常好。
IPQ4028开启I2C功能的更多相关文章
- Android开启OTG功能/USB Host API功能
Android USB 模式简介 设备模式 当计算机或其他USB主机需要连接安卓设备时,此时安卓设备是作为"USB设备"角色的,在计算机上显示为 USB 外设.现在的安卓设备已经被 ...
- PHP开启cURL功能
PHP开启cURL功能 在php.ini中开启 确定php扩展目录下有php_curl.dll类库 在php.int中找到扩展库所在目录 判断目录下是否有php_curl.dll 没有的话去搜索下载 ...
- mysql开启全文索引功能
注意:全文检索模块需要mysql开启全文索引功能,开启方法:修改mysql配置文件:window服务器为my.ini,linux服务器为my.cnf,在 [mysqld] 后面加入一行“ft_min_ ...
- CDC ->> 在某个SQL Server中开启CDC功能
USE AdventureWorks;GO--开启某个数据库的CDC功能EXEC sys.sp_cdc_enable_db;GO--is_cdc_enabled栏位为1代表开启CDC功能了SELECT ...
- apache 开启压缩功能
apache如何开启压缩功能. 1,首先先确认是安装deflatte模块.如果未安装,可以重新编译apache添加参数--enable-deflate=shared ,或者扩展安装deflate模块, ...
- MySQL 5.6 从库开启 crash-safe 功能
原文:Enabling crash-safe slaves with MySQL 5.6 可以对从库进行配置 crash-safe 功能是 MySQL 5.6 关于复制的一个重大改进.然而,我们注意到 ...
- PHP语言开发微信公众平台(订阅号)之开启基本功能及获得可用的服务器地址(2)
1.开启群发功能(单击功能菜单里的"群发功能",并在右侧页面中点击"同意以上声明") 2.(1)在开启开发者模式之前需要完善个人资料(完成头像上传即可) (2) ...
- Apache开启压缩功能
起源 在一般的web服务器中,都会开启压缩功能,也就是deflate或者是gzip的压缩. 开启压缩功能主要的目的是为了减少传输的带宽,从而当服务器响应给客户端的时候,会大大减少传输的数据,代价就是在 ...
- 无线渗透开启WPS功能的路由器
首先关闭网络服务 service network-manager stop wps一般可在10-20小时可以爆破开,攻击难度较低,有一些厂家的无线路由甚至无法关闭WPS功能. 开始侦听开启wps功能的 ...
随机推荐
- Java XML Dom解析工具
Java XML Dom解析工具 缩进等 transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no"); ...
- PHP类的自动加载
spl_autoload_register(function ($className) { require str_replace('\\', '/', $className '.php'); }) ...
- 新特性GTID
什么是GTID 每提交一个事务,当前的执行过程都会拿到一个唯一的标识符,此标识符不仅对其源mysql 实列是唯一的而在给定的复制环境中的所有mysql 实列也是唯一的,所哟的事务与其GTID 之间都是 ...
- 新概念英语(1-129)Seventy miles an hour
Lesson 129 Seventy miles an hour 时速70英里 Listen to the tape then answer this question. What does Ann ...
- SpringCloud的应用发布(一)SpringCloud的样例工程
前言 这个综合例子创建了 6个微服务应用 一个服务注册中心 SvcReg(EurekaServer),生产中要考虑高可用 一个配置中心 CfgMgr + git目录存储配置(ConfigServer, ...
- Go语言的核心Routine-Channel
前言 Go语言通过routine,提供了并发编程的支持. Routine特性 (1) goroutine是Go语言运行库的功能,不是操作系统提供的功能,goroutine不是用线程实现的. 例:启动一 ...
- Extensions in UWP Community Toolkit - SurfaceDialTextbox
概述 UWP Community Toolkit Extensions 中有一个为TextBox 提供的 SurfaceDial 扩展 - SurfaceDialTextbox,本篇我们结合代码详细讲 ...
- python 报障系统(完)
python 报障系统(完) 一.报障系统原理: 原理: 1. 简单管理 2. 角色多管理(权限) a. 登录 session放置用户信息(检测是否已经登录) session放置权限信息(检测是否有权 ...
- Struts(十七):通过CURD来学习paramsPrepareParams拦截器栈
背景: 通过上一章节<Struts(十六):通过CURD来学习Struts流程及ModelDriven的用法>学习了ModelDriven拦截器的用法,上章节中讲到了edit功能. 要修改 ...
- python列表很聪明,支持负数索引
python列表很聪明,支持负数索引