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功能的更多相关文章

  1. Android开启OTG功能/USB Host API功能

    Android USB 模式简介 设备模式 当计算机或其他USB主机需要连接安卓设备时,此时安卓设备是作为"USB设备"角色的,在计算机上显示为 USB 外设.现在的安卓设备已经被 ...

  2. PHP开启cURL功能

    PHP开启cURL功能 在php.ini中开启 确定php扩展目录下有php_curl.dll类库 在php.int中找到扩展库所在目录 判断目录下是否有php_curl.dll 没有的话去搜索下载 ...

  3. mysql开启全文索引功能

    注意:全文检索模块需要mysql开启全文索引功能,开启方法:修改mysql配置文件:window服务器为my.ini,linux服务器为my.cnf,在 [mysqld] 后面加入一行“ft_min_ ...

  4. CDC ->> 在某个SQL Server中开启CDC功能

    USE AdventureWorks;GO--开启某个数据库的CDC功能EXEC sys.sp_cdc_enable_db;GO--is_cdc_enabled栏位为1代表开启CDC功能了SELECT ...

  5. apache 开启压缩功能

    apache如何开启压缩功能. 1,首先先确认是安装deflatte模块.如果未安装,可以重新编译apache添加参数--enable-deflate=shared ,或者扩展安装deflate模块, ...

  6. MySQL 5.6 从库开启 crash-safe 功能

    原文:Enabling crash-safe slaves with MySQL 5.6 可以对从库进行配置 crash-safe 功能是 MySQL 5.6 关于复制的一个重大改进.然而,我们注意到 ...

  7. PHP语言开发微信公众平台(订阅号)之开启基本功能及获得可用的服务器地址(2)

    1.开启群发功能(单击功能菜单里的"群发功能",并在右侧页面中点击"同意以上声明") 2.(1)在开启开发者模式之前需要完善个人资料(完成头像上传即可) (2) ...

  8. Apache开启压缩功能

    起源 在一般的web服务器中,都会开启压缩功能,也就是deflate或者是gzip的压缩. 开启压缩功能主要的目的是为了减少传输的带宽,从而当服务器响应给客户端的时候,会大大减少传输的数据,代价就是在 ...

  9. 无线渗透开启WPS功能的路由器

    首先关闭网络服务 service network-manager stop wps一般可在10-20小时可以爆破开,攻击难度较低,有一些厂家的无线路由甚至无法关闭WPS功能. 开始侦听开启wps功能的 ...

随机推荐

  1. Java XML Dom解析工具

    Java XML Dom解析工具 缩进等 transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no"); ...

  2. PHP类的自动加载

    spl_autoload_register(function ($className) { require str_replace('\\', '/', $className '.php'); }) ...

  3. 新特性GTID

    什么是GTID 每提交一个事务,当前的执行过程都会拿到一个唯一的标识符,此标识符不仅对其源mysql 实列是唯一的而在给定的复制环境中的所有mysql 实列也是唯一的,所哟的事务与其GTID 之间都是 ...

  4. 新概念英语(1-129)Seventy miles an hour

    Lesson 129 Seventy miles an hour 时速70英里 Listen to the tape then answer this question. What does Ann ...

  5. SpringCloud的应用发布(一)SpringCloud的样例工程

    前言 这个综合例子创建了 6个微服务应用 一个服务注册中心 SvcReg(EurekaServer),生产中要考虑高可用 一个配置中心 CfgMgr + git目录存储配置(ConfigServer, ...

  6. Go语言的核心Routine-Channel

    前言 Go语言通过routine,提供了并发编程的支持. Routine特性 (1) goroutine是Go语言运行库的功能,不是操作系统提供的功能,goroutine不是用线程实现的. 例:启动一 ...

  7. Extensions in UWP Community Toolkit - SurfaceDialTextbox

    概述 UWP Community Toolkit Extensions 中有一个为TextBox 提供的 SurfaceDial 扩展 - SurfaceDialTextbox,本篇我们结合代码详细讲 ...

  8. python 报障系统(完)

    python 报障系统(完) 一.报障系统原理: 原理: 1. 简单管理 2. 角色多管理(权限) a. 登录 session放置用户信息(检测是否已经登录) session放置权限信息(检测是否有权 ...

  9. Struts(十七):通过CURD来学习paramsPrepareParams拦截器栈

    背景: 通过上一章节<Struts(十六):通过CURD来学习Struts流程及ModelDriven的用法>学习了ModelDriven拦截器的用法,上章节中讲到了edit功能. 要修改 ...

  10. python列表很聪明,支持负数索引

    python列表很聪明,支持负数索引