背景
- 主板:S32K148
- 开发工具包:v4.0.3
- 操作系统:freeRTOS
问题
我目前正在从事一个项目,该项目需要我监控 i2c 总线并记录主从之间传递的所有信息。最初我认为您可以将 lpi2c 配置为从设备,给它一个任意地址,并将回调配置为在线路上检测到任何内容时执行。问题是回调例程似乎只在 i2c 帧指向我的嗅探器节点(相同的从属地址)时触发。否则,即使在总线上看到流量,程序也永远不会进入回调。
由于之前的问题,我随后求助于使用常规 GPIO 触发 SCL 并以这种方式解码数据。然后我遇到了这个方法的问题:
- 我不知道如何让软件知道何时收到所有字节,因为它是一个常规中断(没有 TX/RX 完成标志)。
- 因为我必须连续处理中断,所以在 ISR 处理程序中编写一些逻辑以在收到最后一个字节时通知程序时遇到了问题。(我尝试添加一些逻辑,但这会导致程序丢失一些位)。
我尝试使用一个 freeRTOS 计时器,它会在每次收到位时不断重置,因此每当计时器到期时,我都可以设置一个标志来通知我的软件。不幸的是,这会导致中断出现一些延迟,我会漏掉一些位。
所以我的问题是:有没有办法配置 lpi2c 来嗅探总线并将所有数据存储在缓冲区中(无论节点地址如何)?如果不能使用 lpi2c,你们推荐什么方法来创建嗅探器?