工具/软件:Linux
大家好、我在进行高频 I2C 读取时遇到了 AM335X SoC (BeagleBone Black)的问题。 我使用内核为3.14.57-ti-r78的 Ubuntu Linux。 我尝试使用内置内核驱动程序在 i2c-1总线上连接 MPU6050加速计/陀螺仪来读取数据(使用中断)。 我已经使它运行得非常好、但当我将采样频率设置得足够高时、我开始得到以下误差:
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:Linux
大家好、我在进行高频 I2C 读取时遇到了 AM335X SoC (BeagleBone Black)的问题。 我使用内核为3.14.57-ti-r78的 Ubuntu Linux。 我尝试使用内置内核驱动程序在 i2c-1总线上连接 MPU6050加速计/陀螺仪来读取数据(使用中断)。 我已经使它运行得非常好、但当我将采样频率设置得足够高时、我开始得到以下误差:
好的、我想了一个想法:如果我允许数据在读取前累加到 MPU6050的 FIFO 中、以便减少 ISR 中完成的工作量、该怎么办。 因此、现在我让它每40个中断执行一次读取、这大大降低了 CPU 负载、并且我可以清晰地看到示波器上的读取间隔、中间有一个很长的暂停时间(读取大约每秒14次)。
我都很兴奋、但有时我仍然会收到一条«仲裁丢失»消息、其中 I2C 模块的 ISR 会消耗100% CPU 并导致系统挂起。 我注意到驱动程序`s 代码'i2c-omap.c'中的这条注释:
/*
*再次访问:我们应该中止信号传输、但总线会继续传输
*仲裁中、我们目前无法从仲裁中恢复。
*
我仍然不知道导致仲裁丢失的原因是什么...可能是 MPU6050本身有错误? 如果它可以从它中恢复,这不会是一个大问题,但它看起来我是 SOL 在这里:(
这似乎是一个信号完整性问题、因为我也从 MPU6050中获得了偶尔的 NACK、但我已经完全隔离了总线上的 MPU6050、仍然得到了误差...
因此、我稍微深入研究一下 I2C-OMAP 驱动程序代码、并意识到当它在超时执行 OMAP-i2c_reset 函数时、它只报告仲裁丢失时的错误。 因此、当仲裁丢失时、我将调用复位函数、它似乎落在了脚上。 它现在已经运行了5天、我没有一次崩溃、我仍然可以读取 I2C 数据。 不过、这是日志中的一个方的地狱、尤其是因为我添加了自己的调试消息:
3月21日09:46:29 DL-EM01内核:[499343.068071] OMAP_i2c 4802a000.i2c:仲裁丢失
3月21日09:46:29 DL-EM01内核:[499343.068149]总线恢复已完成!
3月21日09:46:29 DL-EM01内核:[499343.187437]总线一直处于忙状态、正在恢复
3月21日09:46:29 DL-EM01内核:[499343.187484]总线恢复完成!
3月21日09:46:29 DL-EM01内核:[499343.187504]数据接收期间出错! -11DID 未从 FIFO 读取预期字节数、正在刷新
3月21日09:46:29 DL-EM01内核:[499343.307432]总线一直处于忙状态、正在恢复
3月21日09:46:29 DL-EM01内核:[499343.307462]总线恢复已完成!
3月21日09:46:29 DL-EM01内核:[499343.407467] OMAP_i2c 4802a000.i2c:控制器超时
3月21日09:46:29 DL-EM01内核:[499343.407518] inV-mpu6050 1-0069:Int_enable 失败-110
3月21日09:46:40 DL-EM01内核:[499354.349696] OMAP_i2c 4802a000。i2c:仲裁丢失
3月21日09:46:40 DL-EM01内核:[499354.349773]总线恢复完成!
3月21日09:46:40 DL-EM01内核:[499354.349789]数据接收期间出错! -11DID 未从 FIFO 读取预期字节数、正在刷新
3月21日09:46:41 DL-EM01内核:[499354.627969] MPU6050 FIFO 重置成功!
3月21日09:47:14 DL-EM01内核:[499387.968782]在地址传输期间出错-121,重试....
3月21日09:48:04 DL-EM01内核:[499437.710552] OMAP_i2c 4802a000.i2c:仲裁丢失
3月21日09:48:04 DL-EM01内核:[499437.710719]总线恢复完成!
3月21日09:48:04 DL-EM01内核:[499437.710735]数据接收期间出错! -11DID 未从 FIFO 读取预期字节数、正在刷新
3月21日09:48:04 DL-EM01内核:[499437.987913] MPU6050 FIFO 重置成功!
3月21日09:49:25 DL-EM01内核:[499519.319412]数据接收期间出错! -121Did 未从 FIFO 读取预期的字节数、正在刷写
3月21日09:49:26 DL-EM01内核:[499519.577962] MPU6050 FIFO 重置成功!
3月21日09:49:34 DL-EM01内核:[499528.20955]数据接收期间出错! -121Did 未从 FIFO 读取预期的字节数、正在刷写
3月21日09:49:35 DL-EM01内核:[499528.467959] MPU6050 FIFO 重置成功!
3月21日09:49:53 DL-EM01内核:[499547.261610]数据接收期间出错! -121Did 未从 FIFO 读取预期的字节数、正在刷写
3月21日09:49:54 DL-EM01内核:[499547.517967] MPU6050 FIFO 重置成功!
3月21日09:50:08 DL-EM01 avAHI-daemon [594]:接收到主机192.168.1.81的响应,接口'eth0.0'上的源端口62466无效
3月21日09:50:20 DL-EM01内核:[499574.001976]在地址传输期间出现错误-121,正在重试....
3月21日09:50:46 DL-EM01内核:[499600.236504]数据接收期间出错! -121Did 未从 FIFO 读取预期的字节数、正在刷写
3月21日09:50:47 DL-EM01内核:[499600.487982] MPU6050 FIFO 重置成功!
我真的很想知道所有这些错误的来源- I2C 总线本身似乎存在信号问题、但我尝试将 MPU6050直接连接到 BBB、但它没有帮助。 是否有 AM335x 专家想进入?
谢谢你