# babyos新增MCU说明 目前BabyOS已适配的MCU数量不多,这部分的完善需要所有BabyOS开发者和使用者共同完成。这里将说明新增MCU的步骤。 ## MCU层的介绍 ![mcu_lv](../_static/mcu_lv.jpg) 举例说明: SPIFLASH的驱动访问硬件需要SPI接口,当需要SPI发送时,调用HAL层接口bHalSpiTransfer,此时HAL层会判断是否使用硬件SPI,如果是硬件SPI则调用MCU层的bMcuSpiTransfer。 ![mcu_lv](../_static/mcu_uml.jpg) ## 增加代码的步骤 ### 自动生成代码 mcu目录的命名规则:mcu/厂商名/mcu型号/mcu_型号_外设.c mcu目录有mcu.py脚本,新增mcu则运行它: ![mcu_lv](../_static/mcu_py.png) 生成的C文件里也同时生成了需要实现的接口,根据实际需要自行实现即可。 ### 细分型号配置 mcu目录里有Kconfig文件,这个文件是对mcu进行配置。 例如增加stm32f4xx,其包含了stm32f40x,stm32f42x等,假设细分型号FLASH有差异。 则Kconfig里增加细分型号的配置: ```C #选择ST的芯片 choice prompt "Select ST Chip" depends on VENDOR_ST config STM32F40X bool "STM32F40X" config STM32F42X bool "STM32F42X" endchoice ``` 实现适配接口时可以这么写: ```C int bMcuFunction() { #if (defined(STM32F40X)) // add code ... #endif #if (defined(STM32F42X)) // add code ... #endif } ``` ### 实现MCU接口 实现MCU接口,原则是:推荐但不限制使用寄存器编程 。 对芯片寄存器比较了解则用寄存器编程的方式实现接口。 如果对寄存器不了解,则使用厂商提供的SDK去实现接口。这样方便快速使用起来。 ## MCU接口的扩展 目前MCU接口并没有覆盖所有的外设,也没有覆盖外设的所有操作。驱动或软件模块不断增加的过程中肯定会对HAL层进行扩展。 扩展接口的时机:用户或者开发者新增驱动或者软件模块时,当前的HAL层接口无法满足,则进行新增。 新增HAL层接口定义时也完成了对MCU层接口的定义,最后实现MCU层的接口即可。