最近调试imx8qxp的android11的系统上,发现了一个神奇的东西,发现调试audio的时候遇到了一个很奇怪的现象。
因为源码中是采用gpio模拟的i2c,以前是没有这种操作的。
&cm40_i2c {
#address-cells = <1>;
#size-cells = <0>;
clock-frequency = <100000>;
pinctrl-names = “default”, “gpio”;
pinctrl-0 = <&pinctrl_cm40_i2c>;
pinctrl-1 = <&pinctrl_cm40_i2c_gpio>;
scl-gpios = <&lsio_gpio1 10 GPIO_ACTIVE_HIGH>;
sda-gpios = <&lsio_gpio1 9 GPIO_ACTIVE_HIGH>;
status = “okay”;
};
可以看对应的打印log:

1|mek_8q:/ # logcat -b all | grep i2c
05-20 07:54:41.603 0 0 I : i2c /dev entries driver
05-20 07:54:42.263 0 0 I imx-lpi2c 37230000.i2c: using scl,sda for recovery
05-20 07:54:42.269 0 0 E imx-lpi2c 37230000.i2c: can't get the TX DMA channel, error -19!
05-20 07:54:42.276 0 0 E imx-lpi2c 37230000.i2c: error -ENODEV: dma setup error -19, use pio
05-20 07:54:42.290 0 0 I i2c-16 : LPI2C adapter registered
05-20 07:54:42.295 0 0 E imx-lpi2c 5a810000.i2c: can't get the TX DMA channel, error -19!
05-20 07:54:42.302 0 0 E imx-lpi2c 5a810000.i2c: error -ENODEV: dma setup error -19, use pio
05-20 07:54:42.354 0 0 I i2c-1 : LPI2C adapter registered
05-20 07:54:42.360 0 0 E imx-lpi2c 5a820000.i2c: can't get the TX DMA channel, error -19!
05-20 07:54:42.367 0 0 E imx-lpi2c 5a820000.i2c: error -ENODEV: dma setup error -19, use pio
05-20 07:54:42.505 0 0 I i2c-2 : LPI2C adapter registered
05-20 07:54:42.518 0 0 E imx-lpi2c 5a830000.i2c: can't get the TX DMA channel, error -19!
05-20 07:54:42.525 0 0 E imx-lpi2c 5a830000.i2c: error -ENODEV: dma setup error -19, use pio
05-20 07:54:42.556 0 0 I i2c-3 : LPI2C adapter registered

我的i2c驱动加载正常,log中会有一些警告,并不会导致我的驱动加载失败。 但是我在不知到为什么驱动log中会出现错误的提示,但是这并不影响我的使用,所以也没管他。

可以清楚的看到当我扫描i2c-16的时候,我会马上显示00 ~ 0F的地址,但是我的10~1F的地址中间会卡顿大概2s,此时如果有log打印则会显示在i2c总线地址的中间。
并且我的i2c-16的0x1a的地址上挂载了一个wm8960的音频芯片,我并没有扫描到对应的外设。

mek_8q:/ # i2cdetect -y 16
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
[ 83.344813] AidlLazyServiceRegistrar: Process has 0 (of 1 available) client(s) in use after notification android.apex.IApexService has clients: 0
[ 83.359267] AidlLazyServiceRegistrar: Trying to shut down the service. No clients in use for any service in process.
[ 83.371976] AidlLazyServiceRegistrar: Unregistered all clients and exiting
[ 83.383746] printk: Binder:313_2: 221 output lines suppressed due to ratelimiting
[ 83.393267] init: Service 'apexd' (pid 313) exited with status 0 oneshot service took 60.764000 seconds in background
[ 83.405248] init: Sending signal 9 to service 'apexd' (pid 313) process group...
[ 83.413305] libprocessgroup: Successfully killed process cgroup uid 0 pid 313 in 0ms
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- 68 -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

我试着去i2cdump对应的寄存器。但是他提示我链接超时:

mek_8q:/ # i2cdump -f -y 16 0x1a
0 1 2 3 4 5 6 7 8 9 a b c d e f 0123456789abcdef
i2cdump: i2c_read_byte: Connection timed out

我们通过使用示波器进行测量,发现i2c扫描到了该地址,地址也进行了ACK回复,但是没有握手完成,下面是我测量的时钟信号和数据信号。
蓝色为数据线。黄色为时钟线。可以看到对应的蓝色线条已经被拉低,处于不正常的状态。

这个时候我开始去查看为什么,然后并没有看出什么东西。
后面同事叫我先把驱动加载进去,如果因为wm8960的驱动是会先去判断i2c的地址的,如果没有地址,你的驱动是加载不会成的,后面我添加驱动后发现确实是ok的,我的声卡信息这些都是正常的。
我继续去扫描这个地址,依旧提示

mek_8q:/ # i2cdetect -y 16                                                     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- UU -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- 68 -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
mek_8q:/ #
mek_8q:/ #
mek_8q:/ #
1|mek_8q:/ # i2cdump -f -y 16 0x1a                                             0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f    0123456789abcdef
i2cdump: i2c_read_byte: Connection timed out
00:1|mek_8q:/ # 

但是确实没有报错,我们直接通过播放器播放音乐,发现是有的。我就知道我可能进入了一个误区。
我通过regmap是可以看到对应的寄存器的,通过tinymix去修改后发现寄存器的值也是修改了的。

1|mek_8q:/ # cat  d/regmap/16-001a/registers
00: 01a7
01: 01a7
02: 0178
03: 0178
04: 0000
05: 0008
06: 0000
07: 0042
08: 01c0
09: 0040
0a: 01e6
0b: 01e6
10: 0000
11: 007b
12: 0100
13: 0032
14: 0000
15: 01c3
16: 01c3
17: 01c3
18: 0044
19: 0000
1a: 0000
1b: 0000
1c: 0000
1d: 0000
20: 0100
21: 0100
22: 0150
25: 0150
26: 0000
27: 0000
28: 0178
29: 0178
2a: 0040
2b: 0000
2c: 0000
2d: 0050
2e: 0050
2f: 0000
30: 003a
31: 0037
33: 0080
34: 0008
35: 0031
36: 0026
37: 00e9

所以我们有时候不用去纠结这个i2c工具上的问题,我们用实际的东西进行判断,有就是有,没有就是没有。

关于nxp平台上i2c扫描不到wm8960地址的问题相关推荐

  1. 《预训练周刊》第27期:谷歌发布最新看图说话模型、GitHub:平台上30%的新代码受益于AI助手Copilot...

    No.27 智源社区 预训练组 预 训 练 研究 观点 资源 活动 关于周刊 本期周刊,我们选择了9篇预训练相关的论文,涉及少样本理解.图像检测.决策图.大模型微调.对话微调.分子建模.蛋白质结构预测 ...

  2. 使用Eclipse连接SAP云平台上的HANA数据库实例

    SAP云平台(Cloud Platform)上的HANA数据库实例有两种方式访问: 1. 通过SAP云平台的基于网页版的Development Tool:SAP HANA Web-Based Deve ...

  3. Am335x 平台上GSM 3G/4G modem的一些硬件和软件的杂事

    Am335x 平台上GSM 3G/4G modem的一些硬件和软件的杂事 项目需求 上帝说要有光, 世界就有了光明. 老板说我们的产品需要移动联网,我的一个月时间就没有了... 需求细说 既然老板发话 ...

  4. 【华为云技术分享】如何将90%的代码自动迁移到鲲鹏平台上

    主讲人:华为云云享专家  张老师 大家好,今天要讲的主题是关于软件迁移,这是一个久远的话题,因为但凡牵扯到切换平台.CPU架构的变化,甚至一些语言版本的升级,都可能会面临到软件迁移的问题.今天我们就探 ...

  5. U8G2库移植到STM32平台上

    U8G2库简介 U8g2是嵌入式设备的单色图形库,一句话简单明了.主要应用于嵌入式设备,包括我们常见的单片机: 建议先看这篇博客的介绍,写的比较好u8g2库的使用 这篇博客介绍了对于u8g2的使用,但 ...

  6. spyder上怎样将figure框出来_怎样将数据中心现有的物理机和虚拟机平滑的迁移到云平台上?...

    怎样将数据中心现有的物理机和虚拟机平滑的迁移到云平台上?风险和工作量怎样评估?成熟的产品怎样选型? 某信系统集成公司 技术总监: 首先要有一个正确的理解,你要迁移不是几个虚机和物理机,而是一个或者多个 ...

  7. (转载)大数据实战:站在JMP分析平台上的FIT足迹识别技术

    http://www.csdn.net/article/2014-03-16/2818786-interview-jmp-fit 摘要: 1.作为公益性动物保护组织,WildTrack是如何在JMP统 ...

  8. linux推出mysql对话_以及如何配置它以与Linux平台上的MySQL数据库对话

    Mirth Connect是一个开源集成引擎,主要用于医疗保健领域.这支持各种医疗保健标准(HL7,XML,EDI / X12,DICOM等),这些标准将帮助企业集成不同的系统,并使它们以共同的语言相 ...

  9. linux sdk 窗口句柄,Venus: 针对Linux平台上,对常用的系统API进行面向对象的封装SDK。...

    Venus 项目介绍 Linux平台上,对常用的系统API进行面向对象的封装SDK,使用C++实现,没有使用C++11特效,支持CentOS.Ubuntu.RedHat各个发行版本和不同内核版本使用, ...

最新文章

  1. 工具类静态方法注入dao
  2. Codeforces#363 Div2
  3. 网交会引发的新交易机会
  4. navicat for Oracle连接
  5. scrapy框架_Python:Scrapy框架
  6. 【JEECG技术文档】online自定义模板的使用
  7. 上项线体表位置_体表定位
  8. java schema 验证_java实现的XMLschema验证是什么?
  9. java 返回语句_Java:“缺少返回语句”
  10. 在Leangoo里怎么修改密码?
  11. FISCO BCOS(五)———部署安装jdk1.8
  12. bochs镜像java模拟器_bochs模拟器镜像下载-bochs模拟器win10镜像下载精简版-手机腾牛网...
  13. uniapp--微信小程序--云开发生成短连接h5跳转小程序
  14. 看图赏鉴——阿里云张北数据中心
  15. 第十三章:Sqlserver2019数据库之Transact-SQL 语法基础及常用 SQL 函数总结
  16. 解决word插入的图片不能正常显示
  17. 向量的2-范数、矩阵的2-范数
  18. LaTeX中的参考文献
  19. 创建三个学生对象,分别打印其详细信息
  20. TSL2561传感器介绍

热门文章

  1. 基于采样的路径规划算法总结:RRT-Matlab实现
  2. 3dmax2016软件安装说明
  3. OA办公自动化系统源码
  4. 锐捷RG-S5750交换机配置Telnet、SSH、DHCP、密码恢复、配置保存、删除配置等示例
  5. 小曾用计算机怎么唱,全网独家!小曾新歌:我用准备打仗的方式致敬青春
  6. (二)Flowable中TaskServiceAPI详解
  7. PDF2Word v1.40 汉化版
  8. HTML基本结构标签以及常用标签
  9. 阿里二面,面试官:说说 Java CAS 原理?
  10. 拆解1968年的美国军用计算机,很震撼啊