我正在尝试更改时钟频率.到400 kHz(fastmode),但我找不到文件. 问题是, 读(文件,buf,1)服用0.3 ms 读(文件,buf,count)count> 1返回i oszy.说,F = 88kHz,在一个"持续时间"中显示18个峰值,两个"持续时间"之间的延迟为0.2至0.3 ms 它应该与这里提到的相同,但我找不到我必须将其放入的文件/找不到声明该类型的标题. 配置Linux I2C speed 其次,我找不到有关read()和write()的任何文档.我什至找不到定义write()和read()的headerFile.我发现的唯一有用的文档是 radxa.com/rock/specification (我还没有获得10个代表时必须销毁链接:/) 运行Debian服务器: radxa.com/rock/prebuilt_images imu: www.pololu.com/product/2468/resources 欢呼:) 解决方案
以下是关于 i2c 的编程技术问答
我正在尝试读取来自用户空间C的I2C环境光传感器BH1750.我正在使用带有Linux的Beaglebone口袋. 数据表明,在测量操作后,需要使用以下I2C序列读取结果:S Adr Rd (A) (Data) A (Data) NA P. 我遇到的问题:我发现的所有示例/命令都只读取1个字节,或者需要寄存器地址才能阅读更多. 我发现的最接近的是以下命令:i2c_master_recv(). 但是,我对文档的解释是该命令用于内核 - 设备驱动程序. 如何从用户空间发出这样的I2C阅读序列? 解决方案 我能够使用伊恩·阿伯特(Ian Abbott)的评论来解决它: 假设I2C控制器已打开,并且I2C_SLAVE IOCTL命令已用于设置ADR,则具有2个长度的读取SYSCALL将执行上述I2C读取交易. - 伊恩·雅培 10月4日,13:45 这是由此产生的I2C通信的逻辑分析仪 -
我目前正在研究I.MX6(Android BSP)和24C08WP EEPROM之间的I2C通信. 我在i.mx6上运行以前在linux下在ndk下编译的二进制文件. i检测到I.MX6的I2C总线(地址0x50)的NTAG 5组件,这要归功于i2cdetect工具. 使用以下代码,我可以执行写作操作,可以使用Arduino板和I2C读取操作检查. 但是,当我在i.mx6下执行在用户空间中进行读取操作时,我只获得0xFF value. 这是我的代码: #include #include #include #include #include #include #include "board.h" #include "debug_tools.h" #include "boardselection.h" int
我有一个带有自定义I2C主键盘的X86 CPU.我的Linux是Ubuntu 14.04,内核3.13. 我为自定义I2C主硬件写了一个I2C驱动程序. 当我加载驱动程序时,创建了设备/sys/bus/i2c/devices/i2c-11. 连接到我的I2C总线上有I2C EEPROM内存. 当我加载Linux EEPROM驱动程序时,sys/sys/bus/i2c/devices/i2c-11/11-0050/eeprom是由Eeprom驱动程序自动创建的. 问题:此文件/sys/bus/i2c/devices/i2c-11/11-0050/eeprom仅读取. 从EEPROM文件中读取正常工作,例如:$ sudo cat/sys/bus/i2c/devices/i2c-11/11-0050/eeprom | hexdump -c. 但我无法写入/sys/bus/i2c/devices/i2c-11/11-0050/eeprom,因为仅读取.为什么创建此文件仅读取?
我正在努力计算I2C收到数据的数据包错误代码(PEC),以便知道数据是否有效. 我使用了对我不起作用. 数据看起来像这样:0x00,0x07,0x01,0x12,0x3b,0xd5 pec是0xd5,基于多项式= x^8+ x^2+ x^1+ x^0-0x107 . 所以我的问题是,网站的代码与链接问题的代码之间的区别在哪里: local function crc8(t) local c = 0 for _, b in ipairs(t) do for i = 0, 7 do c = c >> 1 ~ ((c ~ b >> i) & 1) * 0xE0 end end return c end 解决方案 CRC的这个定义在所有数据字节中使用反向位. local function reverse(x) -- reverse bits of a byte local y =
我试图使用两个I2C地址(0x48,0x49)运行两个Raspberry Pi的Adafruit ADS1115S.可以通过将ADDR引脚高(0x49)绑定或使其漂浮(默认为0x48)来设置每个设备的地址.我已经确认,当地址设置为0x48时,每个板都可以正常工作,并且运行" I2Cdetect 1"确认两个板都在正确的地址连接. 我可以成功运行此示例我的问题是:如何获取从I2C地址0x49而不是0x48读取的代码?我在任何地方都找不到文档.请告知. 解决方案 由于有一个Python库,因此应用了Python语言的规则,特别是具有类继承的OOP.也就是说,类ADS1115是从ADS1X15继承的,该ADS1X15依次具有__init__()方法(在OOP 构建器中),定义如下: def __init__(self, address=ADS1x15_DEFAULT_ADDRESS, i2c=None, **kwargs): 这意味着它至少知道两个带有名称address
OpenJDK具有设备I/O(DIO)库,可用于读取硬件传感器. DIO库中的一辆支持的公共汽车是I2C. 我听说台式机主板传感器在SMBUS后面,基本上是I2C巴士的受限版本.我可以使用DIO从主板读取传感器数据 - 例如,CPU温度? 如果是这样,如何? 解决方案 DIO库是Open JDK独有的.它使支持的设备(当前ARMV6和ARMV7)能够读取I2C.在当前的状态下,您必须构建的是您自己,并且为Raspberry Pi编译是唯一受支持的Plattform. 一般阅读主板传感器值并不是一件容易的事,它取决于提供正确信息的供应商.不幸的是,供应商没有使用任何类型的标准化协议,并且信息遍布整个地方,并且支持不同的平台是其自己的任务.
我的Raspberry Pi 4 Model B上的I2C总线不起作用的Altough I2Cdetect确实检测目标. 我尝试使用Raspberry Pi Sense Hat和SSD1306 OLED显示屏和I2C巴士的PCA9685伺服驱动器.一切正常.我不知道为什么现在I2C巴士不起作用.然后我不确定其中一种设备是缺陷. OLED展示有时显示"雪".因此可能是一个损坏的信号. 然后,我没有感觉帽子测试了Raspberry Pi.也许感觉帽子可能是缺陷.没有任何帮助.然后,我将OLED显示器插入了任何成功.之后,PCA9685并插入OLED显示屏.现在,OLED显示屏显示正确的结果.我测试了与伺服检查器连接到PCA9685的三个伺服器,幸运的是我发现它们不是缺陷.因此,我再次连接了PCA9685,但我无法向我的伺服器发送PWM信号.之后,我删除了PCA9685和OLED显示屏上插入的I2C集线器,以再次测试Raspberry Pi Sense Hat.它不起作用.之后,我
我在Raspberry Pi 3上使用OpenCV算法3.我需要将数据从Raspberry Pi输出到Arduino.目前,我正在使用串行,在这里我只需使用USB连接器将Arduino插入Raspberry Pi.但是我的应用需要更快的速度.我想到了探索I2C通信.对于机器人应用,输入传感器值需要快速才能使机器人快速响应. 假设我需要将值推到Arduino板上(要与机器人交谈),这可能是Arduino和Rasp之间更快的数据流的最佳方法. 是否有人有建议或以前的实施可以帮助我? 谢谢. 解决方案 如果您在Arduino和Raspberry Pi中有足够的免费引脚,则可以考虑连接Raspberry Pi和Arduino parallelly. 但是,正如我所说,您应该有很多免费的GPIO来使用此方法 我认为 其他解决方案 Arduino上的I2C在100kHz上工作.您可以比串行更快地获得通讯. SPI可以更快地运行,但需要更多的别针.他们中的任何一个都足够
让我从使用的组件开始: GPIO扩展板将Raspberry Pi连接到组件 BME280 pi 3b 问题描述: 起初这个问题是间歇性的.我们正在收到读数,错误无处出现,对传感器进行了调整(取出并放回进去),这解决了它,但是当我们触摸传感器时,错误再次出现. 我们决定更改传感器,问题从间歇性转变为持久.现在我们将其作为永久性问题. 我们删除了BME280和SMBUS2的包裹,并决定再次重新安装它. rpi bme280:我遵循本BME280安装指南,但是在提示" I2Cdetect -y 1"时,有行但没有数字显示. 到目前为止已确认的内容: 用我的讲师PI进行了测试, 正常工作. 代码很好,我们甚至使用rpi.bme280 提供的示例代码 i2c每次启用 请帮助我,因为我真的迷路了.我需要在下周之前提交此信息,以便对任何帮助表示赞赏. 问题图片 - > 解决方案 我已经试图做出回应,但是SMBUS和I2C
我正在使用Q7模块(X86),并尝试使用Linux上的ACPI SSDT覆盖物配置我们的外围设备.但是我对此感到沮丧.我想我错过了ACPI的一些核心概念. 问题 CPU -> I2C -> PCA9575 GPIO Expander -> virtual,mdio-gpio -> Ethernet Phy 什么有效 DefinitionBlock ("abc.asl", "SSDT", 2, "test", "HAL", 2) { External (\_SB_.PCI0.D01D, DeviceObj) Scope (\_SB.PCI0.D01D) { Device (ABC0) { Name (_HID, "PRP0001") // must be PRP0001 that linux searches for compatible dri
我想制作我的第一个应用程序,该应用程序在STM32上使用I2C,与SSD1306一起使用. "命令模式"中的所有通信都可以正常工作,并且显示1个字节命令的反应.我认为当一个包装中的字节数增加时,问题处于"数据模式". . 基本功能以I2C 发送数据 void i2c1_send(uint8_t address, uint8_t *command, uint16_t length) { while(I2C1->SR2 & I2C_SR2_BUSY); I2C1->CR1 |= I2C_CR1_START; while(!(I2C1->SR1 & I2C_SR1_SB)); I2C1->DR=address; //7 bit address in this byte is already shifted left by one while(!(I2C1->SR1 & I2C_SR1_ADDR)|!(I2C1-
,由于我是嵌入式字段的新手 我读过此链接: 平台驱动程序之间有什么区别和普通设备驱动程序..? 说平台设备/驱动程序可用于不可发现的设备,例如在I2C总线上连接的设备和平台设备通过匹配名称绑定到驱动程序. 我已经浏览了一个板文件,其中使用I2C API(i2c_register_board_info,omap_i2c_add_bus等)注册了I2C总线上连接的音频编解码器(不可发现的设备),所以我的问题是 > I2C设备/驱动程序和平台设备/驱动程序有什么区别? 何时使用I2C相关的API以及何时使用与平台相关的API(platform_driver_register,platform_device_register)进行内核中的设备/驱动程序的注册.或者,如果我们可以使用I2C相关的API进行不可发现的设备(在I2C上连接)注册,则需要平台设备注册. 解决方案 每个SOC(芯片上的硅)或微控制器都将具有I2C控制器,该控制器提供了一种连接和通信与I
我正在尝试为嵌入式板开发驱动程序.驱动程序应该为 v4l2 打开一个接口,并使用 i2c 与2个设备进行通信.驾驶员将充当大师. 我似乎不了解i2c_device_id数组和i2c_add_driver函数的工作方式.我在内核源中阅读了文档,但对多个从属客户端没有帮助. 我必须具有两个分开的探针功能吗? 我必须给我两次打电话i2c_add_driver吗? 如果不是,我将如何保存两个不同的客户端以将不同的字节发送到不同的地址. 我在这里粘贴代码.我尝试实例化两个i2c_drivers,两次称为i2c_driver_add,并分别实现I2C探测.该代码第二次调用i2c_add_driver时已经注册了foo1. 我在我的DTS文件中定义了两个块,例如: &i2c1 { ... foo0: foo0@00 { compatible = "bar,foo0"; reg = ; pinctrl
我有一个英特尔系统.我正在尝试加载AT24.KO和I2C-MUX-PCA9541.KO. 两个模块都具有未调用的探针函数. 根据文档,我需要在Arch_init中调用i2c_registetr_board_info. 但是我不确定在Intel系统(即哪些文件)的何处要这样做. 我在互联网上任何地方都没有看到任何示例. 有人可以提供我添加此调用的文件的指针. 如果这不是正确的方法,请告诉我. 预先感谢您. 解决方案 未调用探针,因为内核找不到可以与驱动程序关联的"匹配"设备.有不同的方法将设备信息提供给内核.他们的讨论如下: 如果这是用于测试目的,则可以通过SYSFS探测I2C设备: echo > /sys/bus/i2c/devices/i2c-0/new_device device_name:I2C设备的名称.应该是驾驶员中使用的. i2c_address:根据设备数据表的地址 的地址 上
我正在尝试将Freescale IMX6 SOC与MPU92/65传感器设备连接. 我已经从Android那里乘MPU92/65设备驱动器( https://github.com/noelmacwan/kernel-10.4.1.4.1.b.0.101/tree/master/master/master/drivers/staging/iio/imu/imu ),并对驱动程序和设备进行了必要的修改树. 设备树修改: &i2c3{ ... extaccelerometer: mpu9250@68{ compatible = "mpu9250"; reg = ; interrupt-parent = ; interrupts = ; int_config = /bits/ 8 ; level_shifter = /bits/ 8
在IMX6SX硬件平台上使用Linux 3.14.52(NXP嵌入式臂). 问题是,在内核启动过程中,除非存在于/sys/class/gpio结构中,否则在设备树中指定的PCF8575 I2C GPIO扩展器不被实例化为/sys/class/gpio结构中的设备.这些设备在/sys/bus/i2c/devices/i2c-1(I2C总线1)结构中列出,但在/sys/class/gpio结构中没有给出GPIOCHIP. 有没有办法将这些设备添加到系统后,将这些设备分配为GPIOCHIP? 在以前的(PowerPC)平台上,设备树中列出的所有设备均分配了GPIOCHIP,无论它们在内核启动过程中是否打开.但是有了我们的手臂平台,这些设备必须在内核靴期间可用.我尝试更改核I2C/GPIO选项(通过.config)尽可能靠近上一个平台,但这似乎没有效果. 解决方案 确保内核在2.6内核分支中的SYSF上有所不同.我也经历了类似的问题.这与处理设备树的处理有关.设备树将不
环境:x86/ubuntu 14.04 我想获得类似于 的东西 &i2c0 { eeprom: eeprom@50 { compatible = "at,24c32"; reg = ; }; }; 但是,由于在x86中没有设备树,因此我在linux内核中关注i2c/instantiating-device文档,并使用"方法4:从用户空间实例化". 实例化的过程: 加载AT24驱动程序 加载i2c-dev驱动程序 实例: # echo eeprom 0x50 > /sys/bus/i2c/devices/i2c-0/new_device dmesg中内核的响应: i2c i2c-0: new_device: Instantiated device eeprom at 0x50 创建了一个目录" 0-0050".在/sys/bus/i2c/devices/i2c-0/0