代码改变世界

IPQ4028开启I2C功能

2018-01-19 16:31  Gierwu  阅读(2114)  评论(0编辑  收藏  举报

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,主要是技术支持非常好。