写一次驱动,跑遍所有 MCU?安信可开源 AiPi-SCBB 通用外设驱动库
还在为每换一块板子就重写一遍 I2C 驱动而头疼?SCBB 想终结这件事。
一句话介绍
AiPi-SCBB 是安信可开源的跨平台通用外设驱动库,通过宏元编程实现硬件抽象层,一套驱动代码,任何 MCU 平台直接用——只需提供你的 BSP 实现。
GitHub 地址:https://github.com/Ai-Thinker-Open/AiPi-SCBB
它解决了什么问题?
搞嵌入式的人都懂这个痛点:
- 用 STM32 写好了 SHT3x 温湿度传感器驱动,换到 BL602 又得重写一遍 I2C 初始化
- CH224A 的 USB-PD 协商逻辑明明和平台无关,但每换颗芯片就得改底层调用
- WS2812 的 PWM+DMA 时序控制,不同平台寄存器完全不同,驱动却没法复用
SCBB 的思路很简单:驱动逻辑归驱动逻辑,硬件操作归硬件操作。用可配置的 BSP 宏把两者隔开,驱动代码只写一次,平台移植只需要填几个 BSP 函数。
目前支持哪些模块?
| 模块 |
说明 |
通信协议 |
典型应用 |
| CH224A |
USB-PD Sink 控制器(5-28V 电压协商,支持 PPS/AVS) |
I2C |
快充协议握手、可调电源 |
| SHT3x |
温湿度传感器 |
I2C |
环境监测、智能家居 |
| WS2812 |
全彩 RGB LED 灯条驱动,附带 HSV/RGB 颜色工具 |
PWM+DMA |
灯效、状态指示 |
| HXD039B2 |
红外编解码(空调遥控协议) |
UART+GPIO |
红外遥控、家电控制 |
覆盖了 I2C、PWM+DMA、UART+GPIO 三大主流外设协议,后续还会持续扩展。
三个设计亮点
1. 宏元编程做硬件抽象——零运行时开销
SCBB 的核心是一套 ACLL 宏机制。以 CH224A 为例:
AXK_CH224A_I2C_ACLL → bsp_i2c_init() // 映射到你的平台 I2C 初始化函数
驱动代码里调的是宏,宏在编译期展开为你平台上对应的 BSP 函数。**没有函数指针、没有虚表、没有额外的运行时开销**——宏展开后就是直接函数调用,性能和你手写的一模一样。
### 2. menuconfig 图形化配置——Linux 内核同款体验
```bash
python menuconfig.py
没错,就是 Kconfig 那套东西。方向键选模块、按 Y 启用、按 S 保存,自动生成 scbb_config.h,CMake 直接读取配置决定编译哪些模块。不需要手写 -D 参数,不需要改 CMakeLists.txt,所见即所得。
对于习惯 Linux/ESP-IDF 开发流程的人来说,这套配置方式上手零成本。
3. 三种集成方式,覆盖所有构建系统
CMake add_subdirectory(推荐):
add_subdirectory(AiPi-SCBB)
target_link_libraries(your_app PRIVATE AiPi::SCBB)
CMake FetchContent(一行拉取):
FetchContent_Declare(aipi_scbb
GIT_REPOSITORY https://github.com/Ai-Thinker-Open/AiPi-SCBB.git)
FetchContent_MakeAvailable(aipi_scbb)
手动源文件添加:Keil、IAR、Makefile 用户也能用,把 .c 和 .h 文件加进工程就行。
无论你用 CMake 还是传统 IDE,都能无缝接入。
移植到新平台有多简单?
以把 CH224A 驱动移植到一个全新的 MCU 平台为例:
- 写 BSP:实现
my_i2c_init()、my_i2c_write()、my_i2c_read() 几个 I2C 操作函数
- 配置 menuconfig:把 BSP 头文件指向你的
my_platform_i2c.h,函数前缀设为 my_i2c
- 编译:完事
驱动逻辑代码一行都不用改。SHT3x、WS2812、HXD039B2 同理,只需要提供对应协议的 BSP 实现。
适合谁用?
- 嵌入式开发者:厌倦了重复造轮子,想要一套可复用的外设驱动
- IoT 方案商:产品线涉及多个 MCU 平台,需要统一驱动层降低维护成本
- 开源硬件玩家:快速验证新模块,不想花时间在底层适配
- 教学场景:学习嵌入式软件分层架构的实用案例
技术栈
- 纯 C 实现,无操作系统依赖(FreeRTOS 为可选依赖)
- CMake 3.15+ 构建系统
- Kconfig/menuconfig 配置系统
- MIT 开源协议
快速上手
git clone https://github.com/Ai-Thinker-Open/AiPi-SCBB.git
cd AiPi-SCBB
pip install kconfiglib windows-curses
python menuconfig.py
30 秒内就能完成克隆、配置、生成配置文件,然后直接集成到你的项目中。
写在最后
SCBB 的理念不复杂——驱动逻辑和硬件操作分离,但真正把这件事做干净、做易用的开源项目不多。安信可把这个库开源出来,希望能帮到每一个被重复写驱动折磨过的嵌入式开发者。
如果你也在做跨平台嵌入式开发,或者手头有常用的外设模块想加入这个库,欢迎来 GitHub 提 Issue 和 PR。
项目地址:https://github.com/Ai-Thinker-Open/AiPi-SCBB
License:MIT(随便用)
安信可科技(Ai-Thinker)出品 · 持续维护中