在 U-Boot 中使用 I2C 读取多个字节

2024-01-06

我的 Freescale p1022tw 板的 I2C 驱动程序有问题。 U-Boot 的控制台上有一个从 I2C 设备读取的命令:

i2c md chip address[.0, .1, .2] [# of objects]

当我从 id 为 0x60、地址为 0x0 的设备读取 4 个字节时,我得到:

tw=>i2c md 60 0 4
0000: 45 45 45 45    EEEE

它返回的这些值是错误的。如果我当时读取一个字节,我可以获得正确的值:

tw=>i2c md 60 0 1
0000: 45    E
tw=>i2c md 60 1 1
0001: 45    E
tw=>i2c md 60 2 1
0002: 46    F
tw=>i2c md 60 3 1
0003: 00    .

我应该得到45 45 46 00 or EEF0在第一个命令中。在此设备的多次读取中,它始终仅返回第一个字节值。如果我尝试获取从地址 0x2 开始的 6 个字节,则输出如下:

tw=>i2c md 60 2 6
0002: 46 46 46 46 46 46    FFFFFF

总线上的其他设备不会出现此问题。例如,在 id 0x4F 的设备中,会打印正确的值:

tw=>i2c md 4F 0.2 6
0000: 18 00 f6 48 00 00    ...H..

上一条命令中的地址有一个“.2”,因为芯片使用 2 个字节作为地址。第一个设备仅使用 1,因此无需输入“.1”(我已经测试过)。

我完成了用于 I2C 通信的飞思卡尔驱动程序的实现,但我没有对其进行任何更改,并且它适用于其他设备。我的同事还说,同样的代码可以在他的主板上运行。有人遇到过类似的问题或者有任何关于为什么会发生这种情况的理论吗?

提前致谢。


我就遇到过这样的情况。我有驱动程序、读写功能,但它不适用于所有 i2c 设备。我发现这是由于不工作的设备对于许多操作有不同的操作格式造成的。不幸的是,这种情况发生了,有一种不标准的协议。当您打开问题设备的文档并将其与工作和/或驱动程序实现进行比较时,您很可能会看到差异。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 U-Boot 中使用 I2C 读取多个字节 的相关文章

  • STM32设置为I2C从机模式

    STM32设置为I2C从机模式 目录 STM32设置为I2C从机模式 前言 1 硬件连接 2 软件编程 3 运行测试 3 1 I2C连续写入 3 2 I2C连续读取 3 3 I2C单次读写测试 4 总结 前言 STM32的I2C作为主机的情
  • u-boot常用命令

    u boot常用命令 查看u boot所支持的命令 查询命令 u boot版本 环境变量 板子相关信息 环境变量操作 内存操作 网络操作 EMMC和 SD卡操作 FAT 格式文件系统操作 EXT格式文件系统操作 ubi格式文件系统操作 bo
  • uboot分析:uboot的启动过程分析

    uboot分析 uboot的启动过程分析 目录 1 U Boot启动过程概述 2 U Boot启动代码具体分析 2 1 第一阶段 ubootcpu s5pc11x start S 2 2 第二阶段 uboot lib arm board c
  • 23. 基于Cortex-A9 uboot代码启动分析

    本篇文章是彭老师第一次在B站直播间 边直播边记录笔记 视频已经上传到B站 现在完善整理成该篇文章 有想学习uboot启动的代码详细流程的老铁可以进入我B站空间配合视频一起学习 视频地址 B站用户名 一口Linux 目录 前言 一 uboot
  • Linux下CH452数码管芯片驱动调试(GPIO模拟I2C)

    1 设备连接 主控板处理器为Cortex A5处理器 内核4 9 0 主控板和CH452引脚定义如下表1 1所示 表1 1 主控板和CH452引脚定义 序号 CH452引脚定义 主控板引脚定义 1 SDA PB29 2 SCL PB30 3
  • 交叉编译Cubietruck的u-boot

    1 下载u boot源码 mkdir cubietruck cd cubietruck git clone https github com linux sunxi u boot sunxi git
  • 03_uboot的源码目录分析

    一 文件夹 1 api 硬件无关的功能函数的API 这些函数是uboot本身使用的 uboot移植时基本不用管 2 api examples API相关的测试事例代码 3 board board是板的意思 就是开发板 这个文件夹下放的每一个
  • 玩转树莓派4B之Uboot移植

    此文参考了以下文章 https blog csdn net weixin 42233878 article details 84980951 个人使用的编译环境为ubuntu1904 64位 我的目的是修改树莓派的uboot代码并且看下深入
  • CORE-ESP32C3

    目录 参考博文 源于网友oled eink aht10项目 源代码修改及复现说明 主要修改 显示效果 编辑硬件准备 软件版本 日志及soc下载工具 软件使用 接线说明 天气显示屏 硬件接线 温度采集 日期温度显示屏 正常初始化LOG 示例代
  • s5p4418的uboot网络无法使用问题解决

    一 前言 s5p4418 是一个三星的基于ARM的 cortex A9的四核处理器 这个 处理器目前常用的两个系统层固件分别是 uboot2014 linux3 4 39 和 uboot2016 linux4 4 172 两个版本 本次针对
  • [ZYNQ随笔] uboot移植中bitstream比特流加载问题:zynq_validate_bitstream: Bitstream is not validated yet

    问题介绍 由于项目设计需要 需要频繁的更换比特流文件 之前使用petalinux生成的boot bin每次都需要合并比特流 比较麻烦 遂换了一个uboot版本 米联客默认的u boot 将bitstream放到了独立于boot bin的文件
  • 如何在 QEMU x86 上模拟 i2c 设备?

    我正在研究 QEMU 1 5 1 6 但还没有看到任何在 i2c 总线上添加设备的文档 有人可以帮忙吗 Thanks 好吧 没人对这个问题感兴趣 我发布我自己的解决方案 由于 QEMU 不支持 I2C 总线级数据传输 因此在将多点触摸数据从
  • STM32F207 I2C 测试失败

    我正在使用 STM32F207 微控制器在 STM3220G EVAL 板上学习嵌入式开发 我尝试通过连接同一芯片上的两个 I2C2 和 I2C3 模块并发送 接收字符来测试 I2C 接口 这是我当前编写的代码 使用 mdk arm 5 i
  • 如何将 I2C 地址传递给 Adafruit CircuitPython 代码? (运行 ADS1115)

    我正在尝试使用两个 I2C 地址 0x48 0x49 在一个 Raspberry Pi 上运行两个 Adafruit ADS1115 每个设备的地址可以通过将 ADDR 引脚连接为高电平 0x49 或使其悬空 默认为 0x48 来设置 我已
  • MCP23017 I2C 设备驱动程序探测函数未调用

    我正在使用以下 I2C GPIO设备驱动 https github com torvalds linux blob master drivers gpio gpio mcp23s08 c访问 MCP23017 GPIO 使用 insmod
  • ESP8266 I2C从机不确认数据

    我有一个 TM4C123 处理器作为 I2C 主处理器 一个 ESP8266 作为从处理器 对于 ESP 我使用的是 Arduino IDE 并在 2 5 2 版安装了 ESP8266 支持 它应该支持 I2C 从模式 但是 我无法让它工作
  • 为什么 i2c_smbus 函数不可用? (I2C——嵌入式Linux)

    有很多参考使用i2c smbus 开发嵌入式 Linux 软件时在 I2C 总线上进行通信的函数 什么时候i2c smbus函数如i2c smbus read word data在软件项目中引用了 ARM8 处理器错误 例如 i2c smb
  • u-boot:搬迁

    这是一个与u boot相关的基本问题 为什么 u boot 代码会自行重新定位 好吧 如果 u boot 是从 NOR flash 或启动 ROM 空间执行 那么这是有道理的 但如果它已经从 SDRAM 运行 为什么它必须再次重新定位自己呢
  • Beaglebone Black 的 U-boot 无法构建 - 目标 CPU 不支持 THUMB 指令

    我正在尝试按照 Chris Simmonds 的 掌握嵌入式 Linux 编程 中的说明为 Beagle Bone Black 构建 u boot 我已经构建了交叉工具链 现在正在尝试使用该工具链构建 Das U boot 但由于不支持 T
  • 如何在uboot中制作“if”和比较语句?

    我是 uboot 和 tftp 编程的新手 基于this url http www denx de wiki view DULG CommandLineParsing 有如何制作if像这样的声明if imi addr then echo I

随机推荐