星闪开发板I2C使用求助
在使用BS21-32S-Kit开发板的过程中发现调用uapi_i2c_master_init总是返回错误码0x80001302, 对应的错误是ERRCODE_I2C_INVALID_PARAMETER
使用的代码
#define I2C_MASTER_ADDR 0x0
#define I2C_SET_BAUDRATE 400000
#define I2C_MASTER_PIN_MODE 2
#define I2C_TRANSFER_LEN 8
#define I2C_TASK_STACK_SIZE 0x1000
#define I2C_TASK_DURATION_MS 500
#define I2C_TASK_PRIO (osPriority_t)(17)
#define I2C_MASTER_BUS_ID 1
#define I2C_SCL_MASTER_PIN 27
#define I2C_SDA_MASTER_PIN 28
static void app_i2c_init_pin(void)
{
/* I2C pinmux. */
uapi_pin_set_mode(I2C_SCL_MASTER_PIN, HAL_PIO_I2C1_CLK);
uapi_pin_set_mode(I2C_SDA_MASTER_PIN, HAL_PIO_I2C1_DATA);
uapi_pin_set_pull(I2C_SCL_MASTER_PIN, 3);
uapi_pin_set_pull(I2C_SDA_MASTER_PIN, 3);
}
static void *i2c_master_task(const char *arg)
{
unused(arg);
uint32_t baudrate = I2C_SET_BAUDRATE;
uint8_t hscode = I2C_MASTER_ADDR;
app_i2c_init_pin();
errcode_t code_init = uapi_i2c_master_init(I2C_MASTER_BUS_ID, baudrate, hscode);
osal_printk("init pin res: 0x%x\n", code_init);
// ...
}
经过了一些排查, 还是不能解决问题
尝试过的方法
-
发现Kconfig中没有开启I2C, 开启后还是不行

-
尝试换了另一个I2C总线, 将代码中I2C_MASTER_BUS_ID从1改成了0, 但执行到uapi_i2c_master_init时直接崩溃
-
由于安信可开发板的SDK半开源, 底层的驱动不开源, 便查看了一些开源的星闪bs21系列代码库的I2C相关代码, 发现有一些 I2C_BUS_MAX_NUM
相关的检查, 以为是ID为1时 I2C_BUS_MAX_NUM
默认也是1, bus >= I2C_BUS_MAX_NUM
为真, 导致返回 ERRCODE_I2C_INVALID_PARAMETER
, 便将Kconfig中 I2C_BUS_MAX_NUM
的默认值从1修改为2,测试 i2c_master_init_check
返回了正常的值, 但是uapi_i2c_master_init依然返回 ERRCODE_I2C_INVALID_PARAMETER
如果安信可的BS21开发板使用的是一样的I2C代码, 应该是 hal_funcs->master_init
这里返回的 ERRCODE_I2C_INVALID_PARAMETER
, 但是这个没法往下排查了...



安信可相关的示例资料太少了, 我是还有配置没开启, 导致了初始化异常吗?