| Age | Commit message (Collapse) | Author |
|
centralize hard I2C per-message route state for DMA, interrupt, and polling paths
make multi-message and no-stop transfers use sequential HAL APIs only
snapshot scheduler and interrupt context once for stable async transfer decisions
reuse the transaction timeout for async wait logging and abort recovery
|
|
enable I2C error irq when async transfer paths are used fall back to polling when scheduler or interrupt context cannot wait for completion complete the wait path on HAL error callback and abort the transfer on async timeout or error allow INT and DMA mode flags to coexist and keep recovery behavior aligned across STM32 I2C IPs
|
|
- add drv_dma common helpers and stm32_dma_config descriptors for STM32 series
- refactor i2c, spi, usart, qspi, and sdio DMA setup and deinit paths to reuse the common layer
- unify DMA IRQ enable, rollback handling, and const board-level DMA configuration usage
|
|
|
|
|
|
|
|
|
|
|
|
|
|
问题:
在使用硬件 I2C 驱动进行音频模块 WM8978 配置时,发现连续 rt_i2c_transfer 进行 I2C 传输时发现,连续多次调用 rt_i2c_transfer 会出现丢包现象;溯源发现是每次使用 rt_i2c_transfer 传输2字节,传输频率过高导致底层 HAL_I2C_Master_Seq_Transmit_DMA 报错 HAL_BUSY;
现象:
rt_completion_wait超时等待完成之后,I2C仍处于HAL_I2C_STATE_BUSY_TX状态,且后续第二次运行至HAL_I2C_Master_Seq_Transmit_DMA时会直接返回HAL_BUSY,从而直接 goto out; 退出而不会再次进行超时等待;
* drv_hard_i2c.c: 修复325行缺失'}'语法错误;更改HAL_I2C_xx_Transimt_xx调用中目标设备地址值;i2c_hard_config.h: 添加STM32F系列芯片xx_DMA_CONFIG宏定义;
* 回溯I2C设备地址传参处(msg->addr<<1)修改;
* fixup: 增加硬件I2C传输延时,解决连续传输导致HAL_BUSY状态;
|
|
在STM32F429IGTx设备上使用硬件i2c驱动程序师遇到以下几个问题:
语法错误:drv_hard_i2c.c 行67、68中i2c_handle未正常替换过来,估计是上个版本对变量重命名后因为宏定义忽略了此处修改;
语法错误:drv_hard_i2c.c 行326中缺少一个"}"导致编译出错;
初始化i2c设备过程中对双地址选项进行设置时(i2c_handle->Init.OwnAddress2Masks = I2C_OA2_NOMASK),STM32F4系列SOC没有这个配置定义,于是我直接将双地址模式关闭了(i2c_handle->Init.DualAddressMode = I2C_DUALADDRESS_DISABLE);
初始化i2c设备(DMA方式)过程中发现i2c_hard_config.h文件中未定义DMA通道配置;
主要补丁如下:
修复硬件i2c驱动代码中语法错误(drv_hard_i2c.c行67、68、326);
关闭默认i2c双地址模式(drv_hard_i2c.c行75:I2C_DUALADDRESS_DISABLE);
添加硬件i2c驱动配置文件DMA相关配置项,增加对SOC_SERIES_STM32F2、SOC_SERIES_STM32F4、SOC_SERIES_STM32F7系列芯片配置DMA_CHANNEL的适配
|
|
|
|
|
|
|