查看: 5003|回复: 22

youyeetoo X1 SBC I2C无法通信

[复制链接]

1

主题

11

回帖

39

积分

新手上路

Rank: 1

积分
39
发表于 2023-10-9 15:02:01 | 显示全部楼层 |阅读模式
本帖最后由 风火轮用户d0ff7 于 2023-10-9 15:07 编辑

硬件主板型号:风火轮youyeetoo X1主板11代N5105四核X86开发板Windows10
固件名称/系统版本:主板自带Win10系统
自编的或固件下载地址:
Log日志: (可以导出,用TXT附件上传)

问题描述及复现步骤:
按照文档:新设备加入到系统:
  1. 1)从注册表缓存中读取BIOS配置,并保存到DSDT0000.bin文件
  2. asl.exe /tab=DSDT /c
  3. 2)反编译DSDT0000.bin文件,生成DSDT0000.dsl (ASL CODE文件)
  4. .\iasl.exe -ve .\DSDT0000.bin
  5. 3)修改DSDT0000.dsl 文件,添加新设备到改文件中
  6. 根据实际需要,添加设备到文件中,后面的I2C/SPI/NFC 使用介绍中 具体举例需要添加的内容.
  7. 4)编译修改好的DSDT0000.dsl,会生成DSDT0000.aml文件
  8. .\iasl.exe -ve .\DSDT0000.dsl
  9. 5)写入注册表缓存
  10. .\asl.exe /loadtable DSDT0000.aml
  11. 6)忽略签名
  12. Bcdedit /set testsigning on
  13. 7)重启系统,这样就能在设备管理器里面看到新设备.
复制代码
在第4)步骤会出现错误:


按照错误提示修改DSDT0000.dsl的重复代码后可以编译通过生成DSDT0000.aml文件。
然后按照 I2C接口读写测试BIOS中添加I2C Slave从机设备,具体code如下:

然后继续执行:
  1. iasl.exe -ve .\DSDT0000.dsl
  2. asl.exe /loadtable DSDT0000.aml
  3. Bcdedit /set testsigning on
复制代码
最后重新启动系统,桌面右下角已经显示开启了测试模式:

然后打开设备管理器,发现了添加的未知设备

然后按照wiki安装驱动方式,安装驱动,打印log显示错误:

再执行I2C-SPI-Test.exe测试工具,发现也并不能成功连接到设备。

并且在安装驱动及执行I2C-SPI-Test.exe测试工具时在I2C的sda和scl总线上用逻辑分析仪并未抓取到任何数据信号:



请问这是什么原因还是我哪里配置有错误。
回复

使用道具 举报

22

主题

352

回帖

1900

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1900
QQ
发表于 2023-10-9 15:42:30 | 显示全部楼层
关于步骤4编译BIOS dsl源码失败:

1)现象:
.\iasl.exe -ve .\DSDT0000.dsl  出现很多错误,
这些错误提示都是 case (XXX)重复

2)原因:
读取主板BIOS二进制后,反编译出来的DSL文件,有部分出现 switch() case XX  重复现象,
需要根据编译的错误提示,对应删除多余的case就可以解决.

比如提示:

./DSDT0000.dsl  63145:    Case(0xA0)
Error 6022- case value already specified
   Original Case value below:
   ./DSDT0000.dsl 63142:    Case(0xA0)

说明DSL源码中,一个switch(X) 对应case 有2个以上相同的 case 0XA0,
C编程语言思路下,一个switch(X)下,只能有一个case 0XA0,其他多余的case 0XA0需要删除

3)处理方法:
再一个 一个switch(X)下,找到对应重复case 0XA0,只保留一个,删除多余的case 0XA0
如何快速定位错误呢:
根据编译错误提示,比如上面说到的提示:
./DSDT0000.dsl  63145:    Case(0xA0)
./DSDT0000.dsl  63142:    Case(0xA0)
那么63145 就是DSDT0000.dsl 文件的行号,对应有一个case 0XA0
那么63142 就是DSDT0000.dsl 文件的行号,也对应有一个case 0XA0

删除其中一个即可.

依次类推,删除删所有的重复的case XX ,就可以.

4)删除多余的case XX后,立即编译,验证是否删除干净.
多次编译,没有报错为止

5)这个BIOS DSL 删除好多余case后,做一个备份,后面添加I2C/SPI设备的时候,可以直接使用.不用重新从主板读取二进制进行编译.
回复 支持 反对

使用道具 举报

1

主题

11

回帖

39

积分

新手上路

Rank: 1

积分
39
 楼主| 发表于 2023-10-9 15:57:27 | 显示全部楼层
风火轮用户68631 发表于 2023-10-9 15:42
关于步骤4编译BIOS dsl源码失败:

1)现象:

已经按上面操作,然后编译完成并成功加载了,但是目前看并不能成功访问I2C设别,我用示波器或逻辑分析在I2C的两根线上并没有抓取到数据信号,目前是这个不知道什么原因,能帮忙看看么?谢谢
回复 支持 反对

使用道具 举报

0

主题

10

回帖

58

积分

注册会员

Rank: 2

积分
58
发表于 2023-10-9 16:22:59 | 显示全部楼层
风火轮用户d0ff7 发表于 2023-10-9 15:57
已经按上面操作,然后编译完成并成功加载了,但是目前看并不能成功访问I2C设别,我用示波器或逻辑分析在I ...

方便截图新添加设备在windows设备管理器里面,查看驱动是否安装成功?
回复 支持 反对

使用道具 举报

1

主题

11

回帖

39

积分

新手上路

Rank: 1

积分
39
 楼主| 发表于 2023-10-9 16:36:16 | 显示全部楼层
风火轮用户OS75I 发表于 2023-10-9 16:22
方便截图新添加设备在windows设备管理器里面,查看驱动是否安装成功?


驱动安装过程中提示I2C通信失败,而且示波器上也未抓取到任何I2C数据
回复 支持 反对

使用道具 举报

0

主题

10

回帖

58

积分

注册会员

Rank: 2

积分
58
发表于 2023-10-9 16:58:45 | 显示全部楼层
风火轮用户d0ff7 发表于 2023-10-9 16:36
驱动安装过程中提示I2C通信失败,而且示波器上也未抓取到任何I2C数据

麻烦提供2个截图:
1)设备管理器截图,类似
https://wiki.youyeetoo.cn/i2c%E5 ... %90%86%E5%99%A8.png
2)I2C-SPI-Test.exe 运行且填写新的的I2C设备名称截图.
回复 支持 反对

使用道具 举报

1

主题

11

回帖

39

积分

新手上路

Rank: 1

积分
39
 楼主| 发表于 2023-10-9 17:08:52 | 显示全部楼层
风火轮用户OS75I 发表于 2023-10-9 16:58
麻烦提供2个截图:
1)设备管理器截图,类似
https://wiki.youyeetoo.cn/i2c%E5%AE%89%E8%A3%85%E9%A9%B1%E5 ...

截图如下:
1)设备管理器截图,

2)I2C-SPI-Test.exe 运行且填写新的的I2C设备名称截图
回复 支持 反对

使用道具 举报

0

主题

10

回帖

58

积分

注册会员

Rank: 2

积分
58
发表于 2023-10-9 17:32:29 | 显示全部楼层
本帖最后由 风火轮用户OS75I 于 2023-10-9 17:34 编辑
风火轮用户d0ff7 发表于 2023-10-9 17:08
截图如下:
1)设备管理器截图,

1)按教程的话,新添加的设备应该出现在"人机接口设备"那里面,不应该在"传感器"那边
2)从截图来看,设备有感叹号,说明驱动也有问题,有感叹号的设备是肯定通讯不上的.
3)从您第一贴来看,您添加新设备名称(HID)是:QMI8658;而从您截图来看名称变成:QST8658了.需要核实一下.
4)所以麻烦提供一下2个文件:
当前添加了新设备使用的BIOS的文件:DSDT0000.dsl
修改过的驱动程序安装文件:SpbDriver.inf
回复 支持 反对

使用道具 举报

1

主题

11

回帖

39

积分

新手上路

Rank: 1

积分
39
 楼主| 发表于 2023-10-9 17:47:51 | 显示全部楼层
  • 文件见附件
  • 另外我解释一下,驱动是可以在微软官网下载(www.catalog.update.microsoft.com),我现在使用的是加速度传感器,正确安装后确实是在传感器那边。
  • 我在驱动安装的时候就抓取通信的信号,但是我没有抓取到任何通信的信号,即便是错的信号。





DSDT0000.zip

112.72 KB, 下载次数: 337

回复 支持 反对

使用道具 举报

1

主题

11

回帖

39

积分

新手上路

Rank: 1

积分
39
 楼主| 发表于 2023-10-9 18:28:08 | 显示全部楼层
风火轮用户d0ff7 发表于 2023-10-9 17:47
  • 文件见附件
  • 另外我解释一下,驱动是可以在微软官网下载(www.catalog.update.microsoft.com),我现在 ...

  • 另外我按照 三、设备ID和驱动程序关联,安装SpbDriver.inf文件提示我:
    回复 支持 反对

    使用道具 举报

    0

    主题

    10

    回帖

    58

    积分

    注册会员

    Rank: 2

    积分
    58
    发表于 2023-10-9 19:29:43 | 显示全部楼层
    本帖最后由 风火轮用户OS75I 于 2023-10-9 19:31 编辑
    风火轮用户d0ff7 发表于 2023-10-9 18:28
    另外我按照 三、设备ID和驱动程序关联,安装SpbDriver.inf文件提示我:

    1)若按教程来,把原BIOS ASL CODE 中的I2C 地址修改一下,配合I2C-SPI-Test.exe 就可以驱动. I2C-SPI-Test.exe是需要和SpbDriver.sys配合使用的.

    SpbDriver驱动下载


    2)新添加设备:
    BIOS ASL描述+驱动程序+和驱动配套的应用程序  才能完好驱动起来的.
    您若希望使用微软的驱动,您需要:
    2.1 知道微软驱动,对该传感器设备在BIOS ASL CODE 中具体的描述要求.
    2.2 对应驱动,目前您有了驱动
    2.3 和驱动配套的应用程序

    这些,您可以咨询芯片厂家.
    回复 支持 反对

    使用道具 举报

    1

    主题

    11

    回帖

    39

    积分

    新手上路

    Rank: 1

    积分
    39
     楼主| 发表于 2023-10-9 23:03:37 | 显示全部楼层
    本帖最后由 风火轮用户d0ff7 于 2023-10-9 23:04 编辑
    风火轮用户OS75I 发表于 2023-10-9 19:29
    1)若按教程来,把原BIOS ASL CODE 中的I2C 地址修改一下,配合I2C-SPI-Test.exe 就可以驱动. I2C-SPI-Test. ...

    我看你发的驱动程序是SPI的有i2c的么,我这边是I2C设备,我测试一下
    回复 支持 反对

    使用道具 举报

    22

    主题

    352

    回帖

    1900

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    1900
    QQ
    发表于 2023-10-10 09:48:44 | 显示全部楼层
    风火轮用户d0ff7 发表于 2023-10-9 23:03
    我看你发的驱动程序是SPI的有i2c的么,我这边是I2C设备,我测试一下

    I2C-SPI驱动(添加QMI8658).zip (32.04 KB, 下载次数: 304)
    回复 支持 反对

    使用道具 举报

    0

    主题

    10

    回帖

    58

    积分

    注册会员

    Rank: 2

    积分
    58
    发表于 2023-10-10 10:02:59 | 显示全部楼层
    风火轮用户d0ff7 发表于 2023-10-9 23:03
    我看你发的驱动程序是SPI的有i2c的么,我这边是I2C设备,我测试一下

    SpbDriver驱动 同时支持SPI和I2C 的.
    13楼
    上传的附件,已经把HID为QMI8658 的I2C设备添加进SpbDriver.inf,在windows测试模式下,
    卸载老驱动,重新安装该驱动即可.
    回复 支持 反对

    使用道具 举报

    1

    主题

    11

    回帖

    39

    积分

    新手上路

    Rank: 1

    积分
    39
     楼主| 发表于 2023-10-10 13:35:57 | 显示全部楼层
    本帖最后由 风火轮用户d0ff7 于 2023-10-10 14:17 编辑
    风火轮用户OS75I 发表于 2023-10-10 10:02
    SpbDriver驱动 同时支持SPI和I2C 的.
    13楼
    上传的附件,已经把HID为QMI8658 的I2C设备添加进SpbDriver.inf ...

    我卸载了老的驱动,安装了你13楼发的I2C-SPI驱动(添加QMI8658).zip 驱动,

    然后用I2C-SPI-Test.exe

    提示连接是成功的,但是我读寄存器的时候显示失败:

    这个点击连接显示成功会和I2C设备通信么?我发现点击连接成功与读数据失败示波器都未抓取到任何数据波形(按我的理解你这个驱动只是读写接口,只要设备地址是正确的,通过I2C接口可以对任何连接的设备进行读写操作)
    回复 支持 反对

    使用道具 举报

    0

    主题

    10

    回帖

    58

    积分

    注册会员

    Rank: 2

    积分
    58
    发表于 2023-10-10 14:46:55 | 显示全部楼层
    风火轮用户d0ff7 发表于 2023-10-10 13:35
    我卸载了老的驱动,安装了你13楼发的I2C-SPI驱动(添加QMI8658).zip 驱动,

    然后用I2C-SPI-Test.exe

    几个方面排查:
    1)在BIOS中I2C地址是否正确?注意是7位地址,不含读写位
    2)SCL,SDA 是否已经加4.7K上拉电阻,不工作的时候,直接万用表测量看看是否是高电平.
    3)接线是否正确
    回复 支持 反对

    使用道具 举报

    1

    主题

    11

    回帖

    39

    积分

    新手上路

    Rank: 1

    积分
    39
     楼主| 发表于 2023-10-10 16:16:00 | 显示全部楼层
    本帖最后由 风火轮用户d0ff7 于 2023-10-10 16:17 编辑
    风火轮用户OS75I 发表于 2023-10-10 14:46
    几个方面排查:
    1)在BIOS中I2C地址是否正确?注意是7位地址,不含读写位
    2)SCL,SDA 是否已经加4.7K上拉电阻, ...

    1)I2C地址确认是正确的,在单片机上可以正常使用
    2)已经加上拉电阻,用示波器测量空闲时SCL和SDA都是1.8v,如下图

    3)接线正确(即便不正确,我示波器也能抓到波形是不是?现在我用示波器根本抓不到主机发出来的I2C波形)
    回复 支持 反对

    使用道具 举报

    0

    主题

    10

    回帖

    58

    积分

    注册会员

    Rank: 2

    积分
    58
    发表于 2023-10-10 18:44:04 | 显示全部楼层
    风火轮用户d0ff7 发表于 2023-10-10 16:16
    1)I2C地址确认是正确的,在单片机上可以正常使用
    2)已经加上拉电阻,用示波器测量空闲时SCL和SDA都是1. ...

    您说1.8V,是不是您上拉用到1.8V电压?
    上拉用1.8V我这边需要测试一下.测试后回复您.
    回复 支持 反对

    使用道具 举报

    0

    主题

    10

    回帖

    58

    积分

    注册会员

    Rank: 2

    积分
    58
    发表于 2023-10-11 08:54:16 | 显示全部楼层
    风火轮用户d0ff7 发表于 2023-10-10 16:16
    1)I2C地址确认是正确的,在单片机上可以正常使用
    2)已经加上拉电阻,用示波器测量空闲时SCL和SDA都是1. ...

    我这边测试了,SCL SDA 上拉1.8V和上拉3.3都没有问题的.

    为了便于分析问题,我修改了测试程序win-I2C-SPI-Test-Tools,当读写失败显示GetLastError(的)值,
    您下载后再测试看看,多读几次,然后把测试软件上显示的错误代码发上来.

    win-I2C-SPI-Test-Tools-20231011.zip (576.45 KB, 下载次数: 1000)

    出现错误的时候,错误代码在测试软件左下角提示信息,如图所示

    I2C设备未反馈.png


    回复 支持 反对

    使用道具 举报

    1

    主题

    11

    回帖

    39

    积分

    新手上路

    Rank: 1

    积分
    39
     楼主| 发表于 2023-10-11 10:28:32 | 显示全部楼层
    本帖最后由 风火轮用户d0ff7 于 2023-10-11 10:30 编辑
    风火轮用户OS75I 发表于 2023-10-11 08:54
    我这边测试了,SCL SDA 上拉1.8V和上拉3.3都没有问题的.

    为了便于分析问题,我修改了测试程序win-I2C-SPI- ...

    我现在把器件去掉,去测量输出电压发现:I2C的VCC只有0.17左右,SDA和SCL只有0.57左右,,而我测了SPI的VCC是3.3v,是不是这路I2C有问题了?



    回复 支持 反对

    使用道具 举报

    1

    主题

    11

    回帖

    39

    积分

    新手上路

    Rank: 1

    积分
    39
     楼主| 发表于 2023-10-11 10:40:55 | 显示全部楼层
    风火轮用户OS75I 发表于 2023-10-11 08:54
    我这边测试了,SCL SDA 上拉1.8V和上拉3.3都没有问题的.

    为了便于分析问题,我修改了测试程序win-I2C-SPI- ...

    我这边用你修改的软件测试了,错误如下图:
    回复 支持 反对

    使用道具 举报

    0

    主题

    10

    回帖

    58

    积分

    注册会员

    Rank: 2

    积分
    58
    发表于 2023-10-11 14:38:24 | 显示全部楼层
    本帖最后由 风火轮用户OS75I 于 2023-10-11 14:41 编辑
    风火轮用户d0ff7 发表于 2023-10-11 10:40
    我这边用你修改的软件测试了,错误如下图:

    1)关于电压
    I2C接口中的VCC 应该是3.3V才对.0.17V就是没有电压,检查一下2个0欧电阻是否断开或虚焊了:R2303或者R4002 ?

    R2303.png

    SCL/SDA 0.5V左右是对的,使用的时候,需要外接上拉电阻
    SPI-VCC是3.3V是对的.
    2)软件显示err code=433 表示未找到设备或者未识别设备.
    这个有3个可能:
    windows 驱动不对,重新安装windows驱动看一下.
    I2C的SDA/SCL未接上拉电阻也会出现.
    I2C设备未做有效应答

    回复 支持 反对

    使用道具 举报

    1

    主题

    11

    回帖

    39

    积分

    新手上路

    Rank: 1

    积分
    39
     楼主| 发表于 2023-10-11 16:20:16 | 显示全部楼层
    风火轮用户OS75I 发表于 2023-10-11 14:38
    1)关于电压
    I2C接口中的VCC 应该是3.3V才对.0.17V就是没有电压,检查一下2个0欧电阻是否断开或虚焊了:R2303 ...

    我量了一下R2303断开了
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|风火轮WIKI|手机版|小黑屋|深圳风火轮团队 ( 粤ICP备17095099号 )

    GMT+8, 2024-12-4 01:17 , Processed in 0.145763 second(s), 24 queries .

    快速回复 返回顶部 返回列表
     
    【客服1】 商务合作 15289193
    【客服2】 业务洽谈 13257599
    【客服3】 售前咨询 510313198
    【邮箱】
    smartfire@smartfire.cn