babyos新增MCU说明

目前BabyOS已适配的MCU数量不多,这部分的完善需要所有BabyOS开发者和使用者共同完成。这里将说明新增MCU的步骤。

MCU层的介绍

mcu_lv

举例说明:

SPIFLASH的驱动访问硬件需要SPI接口,当需要SPI发送时,调用HAL层接口bHalSpiTransfer,此时HAL层会判断是否使用硬件SPI,如果是硬件SPI则调用MCU层的bMcuSpiTransfer。

mcu_lv

增加代码的步骤

自动生成代码

mcu目录的命名规则:mcu/厂商名/mcu型号/mcu_型号_外设.c

mcu目录有mcu.py脚本,新增mcu则运行它:

mcu_lv

生成的C文件里也同时生成了需要实现的接口,根据实际需要自行实现即可。

细分型号配置

mcu目录里有Kconfig文件,这个文件是对mcu进行配置。

例如增加stm32f4xx,其包含了stm32f40x,stm32f42x等,假设细分型号FLASH有差异。

则Kconfig里增加细分型号的配置:

#选择ST的芯片
choice
    prompt "Select ST Chip"
    depends on VENDOR_ST
config STM32F40X
    bool "STM32F40X"    
config STM32F42X
    bool "STM32F42X"    
endchoice

实现适配接口时可以这么写:

int bMcuFunction()
{
#if (defined(STM32F40X))
    // add code ...
#endif
    
#if (defined(STM32F42X))
    // add code ...
#endif
}

实现MCU接口

实现MCU接口,原则是:推荐但不限制使用寄存器编程 。

对芯片寄存器比较了解则用寄存器编程的方式实现接口。

如果对寄存器不了解,则使用厂商提供的SDK去实现接口。这样方便快速使用起来。

MCU接口的扩展

目前MCU接口并没有覆盖所有的外设,也没有覆盖外设的所有操作。驱动或软件模块不断增加的过程中肯定会对HAL层进行扩展。

扩展接口的时机:用户或者开发者新增驱动或者软件模块时,当前的HAL层接口无法满足,则进行新增。

新增HAL层接口定义时也完成了对MCU层接口的定义,最后实现MCU层的接口即可。