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.

[参考译文] RTOS:无论写入的字节数如何、I2C_transfer 函数都会返回错误。

Guru**** 2606725 points
Other Parts Discussed in Thread: EK-TM4C129EXL

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/581239/rtos-i2c_transfer-function-return-an-error-no-matter-the-number-of-bytes-written

Thread 中讨论的其他器件:EK-TM4C129EXL

工具/软件:TI-RTOS

我们通过 i2c 与  另一家制造商的演示板连接 。  该板在  i2c 总线中具有内部上拉电阻器、

我们使用示例 EK-TM4C129EXL -> i2ctmp006 作为 项目的基础,这非常简单 ,但无论    写入的字节数如何,函数 I2C_transfer 都会在写操作中返回错误。

在示波器上观察、第一个字节似乎在  i2c 总线中传输、然后该函数返回错误。

我们使用  EK-TM4C129EXL 板的 I2C8 i2c 接口 :

在"Board.h" 中:

#define Board_I2C_CRIPTO EK_TM4C129EXL_I2C8

EK-TM4C129EXL.c 中


CONST I2CTIVA_HWAttrs i2cTivaHWAttrs [EK_TM4C129EXL_I2CCOUNT ={
    {
    baseAddr = I2C2_base、
    .intNum = INT_I2C2、
    .intPriority =(~ 0)
    }、
    {
        baseAddr = I2C8_BASE、
        .intNum = INT_I2C8、
        .intPriority =(~ 0)
    }、
};

void EK_TM4C129EXL_initI2C (void)

    /* I2C7初始化*/
    /*
     *注意:TI-RTOS 示例为 SSI2或 I2C7配置引脚 PD0和 PD1。 因此、
     *同时使用 I2C 和 SPI 驱动程序时会发生冲突
     *应用程序。 修改此文件中的引脚多路复用设置并解析
     *运行应用程序前发生冲突。
     */


   /*启用外设*/
   SysCtlPeripheralEnable (SYSCTL_Periph_I2C7);
 
   /*将相应的引脚设置为 I2C 而不是 GPIO。 */
   GPIOPinConfigure (GPIO_PD0_I2C7SCL);
   GPIOPinConfigure (GPIO_PD1_I2C7SDA);

  GPIOPinTypeI2CSCL (GPIO_PORTD_BASE、GPIO_PIN_0);
  GPIOPinTypeI2C (GPIO_PORTD_BASE、GPIO_PIN_1);

  /* I2C8初始化*/

    /*启用外设*/
    SysCtlPeripheralEnable (SYSCTL_Periph_I2C8);

    /*将相应的引脚配置为 I2C 而不是 GPIO。 */
    GPIOPinConfigure (GPIO_PA2_I2C8SCL);
    GPIOPinConfigure (GPIO_PA3_I2C8SDA);
    GPIOPinTypeI2CSCL (GPIO_Porta_base、GPIO_PIN_2);
    GPIOPinTypeI2C (GPIO_Porta_base、GPIO_PIN_3);

    I2C_init ();

  在示波器上、 第一 个字节被转接 并接收(i2c 地址)  来自接收器的 ACK (第9位)  

我们不知道 I2C8中断是否正常工作。

您是否对​​问题的可能原因有任何了解?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Ricardo、
    您能否确保不使用引脚 PQ2和 PQ3? PQ2/PA3和 PQ3/PA2与电阻器 R19和 R20短接在一起。 我在板级配置文件中看到 PQ2和 PQ3也用于 SPI 和 SDSPI。
    另一件要尝试的事情是、看看您的演示是否使用 I2C7而不是 I2C8?
    此致、
    Janet
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    更好地在示波器中调查问题并与加密套件制造商提供的演示卡进行比较、 地址字节中的波形存在差异(在总线 i2c 中传输的第一个字节)。

       由 Cripto 演示板生成的信号 (地址字节0xC0) 正确

    由  Tiva-C I2C API 生成的信号 (地址 字节0xC0 ) -错误 (缺少最常见的位)

    TExaS I2C API 生成的地址字节似乎  未 发送 地址的高位 (0xC0 = 1100 00000)。  在  我的软件中将其更改为0xE8 (1110 0000),然后  它生成的信号类似于 由 xilto 演示卡生成的信号 ,通信工作正常。

    因此、我的问题通过 这种方式得到了解决。

    我确定我的程序中的 i2c 地址已正确设置为0xC0、 并在 CCS 调试工具提供的 i2c 通信的低级日志中进行确认。