工具/软件:
我们使用 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 信号:
此致