工具/软件:
我们使用 CC2640R2F 蓝牙芯片组、其中包含 ATECC608、该器件是一款通过 IOID_4和 IOID_5连接到 I2C0总线的 I2C 安全芯片。
UART0闭合时、I2C 驱动程序正常工作。 但如果我打开 UART0端口、I2C_TRANSFER 将始终返回 false、I2C 寄存器 DATAACK_N ADRACK_N ERR 全部设置为1。 我将 LA 连接到 SDA 和 SCL、发现时钟信号丢失。
我们使用的是 simplelink_cc2640r2_SDK_5_30_01_11 SDK。
以下是配置代码:
if (bus >= 0 && bus < MAX_I2C_BUSES)
{
I2C_BitRate frequency;
I2C_Params_init(&i2cParams);
//change to baudrate
if(cfg->atcai2c.baud == 1000000){
frequency = I2C_1000kHz;
}else if(cfg->atcai2c.baud == 400000){
frequency = I2C_400kHz;
}else{
frequency = I2C_100kHz;
}
i2cParams.bitRate = frequency;
#if I2C_USING_CALLBACK_MODE
i2cParams.transferCallbackFxn = hal_i2c_callback;
i2cParams.transferMode = I2C_MODE_CALLBACK;
#endif
i2c = I2C_open(Board_I2C0, &i2cParams);
phal->hal_data = NULL; //TODO: not use temporay
return ATCA_SUCCESS;
}
UART_Params uartParams; /* Create a UART with data processing off. */ UART_Params_init(&uartParams); uartParams.writeMode = UART_MODE_BLOCKING; uartParams.readMode = UART_MODE_BLOCKING; uartParams.readReturnMode = UART_RETURN_FULL; /*UART_RETURN_NEWLINE*/ uartParams.writeDataMode = UART_DATA_BINARY; uartParams.readDataMode = UART_DATA_BINARY; uartParams.baudRate = BaudRate; uartParams.dataLength = UART_LEN_8; uartParams.stopBits = UART_STOP_ONE; uartParams.parityType = UART_PAR_NONE; /* open Uart port */ uartHandler = UART_open(Board_UART0, &uartParams);
下面是一些屏幕截图


以下是禁用 UART 时的正常 I2C 信号:

此致