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.

[参考译文] CC3235MODSF:cc3235 -具有 FIFO 的 i2c 从器件

Guru**** 2558250 points


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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/927160/cc3235modsf-cc3235---i2c-slave-with-fifo

器件型号:CC3235MODSF

尝试实现一个简单的从器件、该从器件向主器件读取操作应答4-5-6字节的数据。

浏览文档(swru543技术参考手册)、我不清楚 FIFO 应该如何与我看到的一起工作。

已尝试以下代码段、但我没有从从从器件模块获得答案、它只是将 SDA 线路保持在低电平、并且数据请求标志被置位。

就像 FIFO 根本不会运行并且需要写入数据寄存器一样、当我取消对数据区域写入的注释时、我看到从器件以4-5-6字节的0x88进行应答(可以认为这是正确的、即使最后一个字节写入数据是0x44也是如此)。

无论如何、FIFO 似乎不起作用。 有什么想法为什么? 我这边有什么问题?

PRCMPeripheralReset (PRCM_I2CA0);

POWER_setDependency (PowerCC32XX_Periph_GPIOA0);
Power_setDependency (PowerCC32XX_Periph_GPIOA1);
POWER_setDependency (PowerCC32XX_Periph_GPIOA2);
Power_setDependency (PowerCC32XX_Periph_GPIOA3);
POWER_setDependency (PowerCC32XX_Periph_GPIOA4);

PinTypeGPIO (I2CCC32XX_PIN_01_I2C_SCL 和0xFF、(I2CCC32XX_PIN_01_I2C_SCL >> 8)、true);
PinTypeGPIO (I2CCC32XX_PIN_02_I2C_SDA 和0xFF、(I2CCC32XX_PIN_02_I2C_SDA >> 8)、true);

Power_setDependency (PowerCC32XX_Periph_I2CA0);

MAP_I2CMasterDisable (I2CA0_BASE);
MAP_I2CSlaveDisable (I2CA0_BASE);

MAP_I2CTxFIFOFlush (I2CA0_BASE);
MAP_I2CRxFIFOFlush (I2CA0_BASE);

MAP_I2CTxFIFOConfigSet (I2CA0_BASE、I2C_FIFO_CFG_TX_SLAVE);
MAP_I2CRxFIFOConfigSet (I2CA0_BASE、I2C_FIFO_CFG_RX_SLAVE);

MAP_I2CSlaveFIFOEnable (I2CA0_BASE、I2C_SCSR_TREQ | I2C_SCSR_FBR);

MAP_I2CSlaveIntClear (I2CA0_BASE);
MAP_I2CSlaveIntClearEx (I2CA0_BASE、0xFFFFFFFF);

MAP_I2CSlaveInit (I2CA0_BASE、SLAVE_I2C_ADDR);
MAP_I2CSlaveEnable (I2CA0_BASE);

MAP_I2CFIFODataPut (I2CA0_BASE、0x12);
MAP_I2CFIFODataPut (I2CA0_BASE、0x23);
MAP_I2CFIFODataPut (I2CA0_BASE、0x34);
MAP_I2CFIFODataPut (I2CA0_BASE、0x45);
MAP_I2CFIFODataPut (I2CA0_BASE、0x56);

while (1)
{
if (I2CSlaveStatus (I2CA0_BASE)& 0x02)
{
/*
MAP_I2CSlaveDataPut (I2CA0_BASE、0x88);
MAP_I2CSlaveDataPut (I2CA0_BASE、0x77);
MAP_I2CSlaveDataPut (I2CA0_BASE、0x66);
MAP_I2CSlaveDataPut (I2CA0_BASE、0x55);
MAP_I2CSlaveDataPut (I2CA0_BASE、0x44);
*
MAP_I2CFIFODataPut (I2CA0_BASE、0x34);
MAP_I2CFIFODataPut (I2CA0_BASE、0x45);
MAP_I2CFIFODataPut (I2CA0_BASE、0x56);
MAP_I2CFIFODataPut (I2CA0_BASE、0x34);
MAP_I2CFIFODataPut (I2CA0_BASE、0x45);
MAP_I2CFIFODataPut (I2CA0_BASE、0x56);

I2CSlaveIntClearEx (I2CA0_BASE、0xFFFFFFFF);
}
} 

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

    当读取/写入从机时、FIFO 甚至不会显示接收到的任何字节(FIFOSTATUS=0x00010001)。 FIFO 为空。

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

    找到错误。 API 会覆盖 SCSR 寄存器、因此只有以下调用序列会启用从机模块、从机操作并为从机分配 FIFO:

    I2CSlaveInit (I2CA0_BASE、SLAVE_I2C_ADDR);
    I2CSlaveFIFOEnable (I2CA0_BASE、I2C_SCSR_TREQ | I2C_SCSR_FBR); 

    如果在 CSR 寄存器的 FIFO 字段或 SLAVE_ENABLE 字段之间调用任何其他 SlaveEnable 字段、则会清除...

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

    很高兴您能够解决这个问题!

    BR、

    Vince