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.

[参考译文] LAUNCHXL-CC3235SF:I2C 通信

Guru**** 2589280 points
Other Parts Discussed in Thread: CC3235SF

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/1060095/launchxl-cc3235sf-i2c-communication

器件型号:LAUNCHXL-CC3235SF
主题中讨论的其他器件:CC3235SF

您好 TI

简单地说、我尝试在 I2C 端口上获取数据。 但 我没有收到任何数据。

我正在使用 cc3235sf 作为主设备并尝试执行 I2C 事务。

  

I2C_Params_init (&i2cParams);
i2cParams.bitrate =I2C_400kHz;
// I2C_Params.transferMode = I2C_MODE_BLOCKING;
I2C = I2C_open (CONFIG_PN532_I2C、&i2cParams);
if (i2c == NULL)

Display_printf (display、0、0、"Error Initializing I2C\n");
while (1);

其他

display_printf (display、0、0、"I2C initialized!\n"\});

空 I2Creaddata (uint8_t *缓冲区、uint8_t n)

i2cTransaction.slaveAddress = PN532_I2C_ADDRESS;
i2cTransaction.readBuf =缓冲;
i2cTransaction.ReadCount = n+2;

if (I2C_transfer (i2c、&i2cTransaction)){
display_printf (display、0、0、"read data ");

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您已针对同一问题多次在此处发布。 我无法重复您的确切问题。  

    您是否确定了总线的范围? 您是否收到 ACK?  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    下面我提到了一个写入代码、用于轻松地向从器件发送数据 、但当尝试从从器件接收数据时、该代码不成功。

    I2CtxBuf[0]= 0x00;//前导码=始终为0x00


    I2CtxBuf[1]= 0x00;//开始代码=字节1始终为0x00


    I2CtxBuf[2]= 0xFF;//开始代码=字节2始终为0xFF


    I2CtxBuf[3]= 2;//LEN =数据包长度 TFI 字节加上此数据包中的字节

    I2CtxBuf[4]= 254;//LCS =[LEN + LCS]的数据包长度校验和低位字节= 0x00
    //1+255 = 256、其低字节为0。

    I2CtxBuf[5]= 0xD4;//TFI = 0xD4用于与 PN532的通信、或0xD5用于与 PN532的通信(D4为 dec212)


    I2CtxBuf[6]= 0x02;//PD0 =第一个数据包字节


    I2CtxBuf[7]= 42;//DCS =[TFI + PD0 + PD1 +…的校验和低字节 + PDN + DCS]= 0x00
    //0+212+2+0+DCS=256

    I2CtxBuf[8]= 0x00;//后同步码=始终为0x00


    i2cTransaction.writeBuf =I2CtxBuf;

    i2cTransaction.writeCount = 9;

    i2cTransaction.slaveAddress = PN532_I2C_ADDRESS;

    if (I2C_transfer (i2c、&i2cTransaction)){

    Display_printf (display、0、0、"Successful FirmwareVersion");

    否则{
    display_printf (display、0、0、"不成功的固件版本");

    i2cTransaction.slaveAddress = PN532_I2C_ADDRESS;
    i2cTransaction.readBuf = I2CrxBuf;
    i2cTransaction.ReadCount = 9;

    I2C_transfer (i2c、&i2cTransaction);

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您是否了解什么会使读操作失败? 是否确定从设备遵循正确的通信协议?

    您是否需要2个独立的 I2C 事务? 您可以在第一次传输中设置 ReadCount 和 readBuf。 因此、在单次传输中进行读取和写入。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的、我确信从器件的通信协议是正确的。 在10倍以上的写入缓冲区发送到 PN532 RFID  从站需要建立固件版本。 写入缓冲器发送很容易、但当有时间从从从器件读取数据时、我无法读取数据。  我认为从器件未应答。

    有人建议如何解决这个问题?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    如果从器件在读取期间没有应答、那么为什么它在写入期间也会应答?  

    您确定具有正确的地址吗? 请按照 Adafruit 或 SparkFun 中的一些示例了解该从器件。 您必须使用逻辑分析仪并查看在总线上发送的实际数据。  

    您能否证明这是 CC3235或 TI 驱动程序的问题?