发帖
1 0 0

不敢想象,这个项目的模块达到50+的时候,就不用啃芯片手册了

起个名字好难啊
论坛元老

42

主题

88

回帖

8065

积分

论坛元老

积分
8065
小安派系列 71 1 10 小时前

写一次驱动,跑遍所有 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 平台为例:

  1. 写 BSP:实现 my_i2c_init()my_i2c_write()my_i2c_read() 几个 I2C 操作函数
  2. 配置 menuconfig:把 BSP 头文件指向你的 my_platform_i2c.h,函数前缀设为 my_i2c
  3. 编译:完事

驱动逻辑代码一行都不用改。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)出品 · 持续维护中


──── 0人觉得很赞 ────

使用道具 举报

赞赞赞👍,慢慢学起来。
您需要登录后才可以回帖 立即登录
高级模式
返回
统计信息
  • 会员数: 31197 个
  • 话题数: 42278 篇