Raspberry pi 如何通过I2C在Raspberry pi和PIC设备(PIC16F18325)之间进行通信

Raspberry pi 如何通过I2C在Raspberry pi和PIC设备(PIC16F18325)之间进行通信,raspberry-pi,pic,i2c,mplab,mcc,Raspberry Pi,Pic,I2c,Mplab,Mcc,我正试图通过I2C从PIC设备与Raspberry pi 3B+通信。 我的PIC设备是PIC16F18325 首先,我使用MCC(mplab代码配置)生成i2c库。 覆盆子pi设置为主,pic设备设置从 问题 我想将数据从从机传递到主机,但我不知道如何使用生成的库。 我应该如何使用main.c中的i2c1_slave.h库 我的密码在这里 从生成的库 I2C是一种双向总线,至少有一个主总线和一个从总线。Raspberry Pi上的程序应提供I2C主函数,PIC从函数上的程序。I2C主机始终

我正试图通过I2C从PIC设备与Raspberry pi 3B+通信。
我的PIC设备是
PIC16F18325

首先,我使用MCC(mplab代码配置)生成i2c库。 覆盆子pi设置为主,pic设备设置从

问题
我想将数据从从机传递到主机,但我不知道如何使用生成的库。
我应该如何使用main.c中的i2c1_slave.h库

我的密码在这里

  • 从生成的库


I2C是一种双向总线,至少有一个主总线和一个从总线。Raspberry Pi上的程序应提供I2C主函数,PIC从函数上的程序。I2C主机始终启动数据交换

为了与从机交换数据,主机发送一个包含从机地址的字节,以及它是要发送更多字节还是等待接收。当从机接收到该字节时,它应该通过发送或接收相应地响应

只有当主设备(RPi)在包含从设备地址的I2C启动条件下在总线上放置一个字节时,才会在从设备(PIC)上触发中断


中断服务程序必须处理接收到的字节并准备下一个字节。读/写位决定响应和下一个动作,以及准备下一个中断的内务管理。从属设备执行的确切步骤必须符合主设备的要求,反之亦然。

我建议先阅读PIC数据表的相关章节。无论如何,生成的代码可能是硬件的一个薄包装。一旦你了解了I2C硬件的功能,你就会更容易理解(和欣赏)代码生成器为你做了什么。是的,我已经阅读了数据表并理解了I2C机制。根据I2C协议,生成的代码似乎提供了“I2C_Open()”和“I2C_Close()”。因此,我尝试在main.c中使用上述函数,但无法从Raspberry Pi中识别PIC设备。你知道怎么回事吗?该库似乎安装了一个中断处理程序,每当有I2C总线活动时就会调用它(主机试图与设备进行
对话)。中断处理程序依次尝试调用您必须自己提供的函数。使用参数调用这些函数,以便您知道请求的数据。然后用适当的字节进行响应。首先,我会用示波器观察i2c总线,查看RPI是否发送了一些信息,验证是否有正确的引脚等。或者在ISR中插入一些信息(打开LED),以便查看活动。我在示波器上看到RPI在SCL上发送一些信息,以查找i2c设备。检查上述情况后,当我连接PIC的SCL引脚和RPi的SCL引脚时,我无法确认RPi发送的信号。PIC的SCL和SDA引脚设置为开漏。是。这是正确的。当我将i2C传感器连接到RPi并进行检查时,我能够确认RPi上的设备地址。所以我连接了图片并检查了它,但是我从RPi端找不到图片上设置的地址。如另一条注释所述,PIC使用中断功能实现i2c从机,但问题是从RPi发送的启动序列信号没有到达PIC。@calm 0815看起来像
SSP1ADD
设置为8