这是最新(主)开发分支的文档。如果您正在查找以前版本的文档,使用左侧的下拉菜单选择所需的版本。

外设驱动

驱动架构

驱动架构图
  • LL (Low Layer)

    用于封装各 Chip 寄存器操作,避免应用层直接调用寄存器接口。

  • HAL (Hardware Adaption Layer)

    基于 LL 层接口实现基础硬件功能。

  • Controller Driver

    基于 HAL 层接口 实现 Chip 内各控制器的各种功能,具有 OS 依赖性,执行互斥,信号量等资源保护能力。 (控制器种类如: I2C, SPI, DMA, Timer, WDT, I2S, Clock, USB, SDIO, IRQ, PWM, ADC, LCD, Touch, Uart, RTC, PMU, Crypto Engin, GPIO 等)

  • Device Driver

    基于 Controller Driver 接口,实现 Chip 外部设备驱动功能(如: 传感器, EEPROM, SIP Flash, TFT 屏 ……)

  • Device Manager

    设备管理单元, 用于统一管理当前工程的所有设备 (Controller 及外部设备) 配置,类似 Linux 设备树功能

用户可参考 Example, 使用 Controller Driver API 进行应用程序开发。

驱动介绍

如何添加一个新的设备驱动

基于现在的驱动架构,若要添加一个新的设备驱动基本上有如下步骤和注意事项

  1. Pinmux 的需求调研及配置,具体可参考 Pinmux

  2. Device Table 中添加新设备 配置,具体可参考 设备表

  3. 规划 新device 的 wm_device_t 结构体, 例如:

EEPROM数据结构
  1. 规划 新device 驱动架构,包含 ops 定义, 防重入机制的设计, 例如:

EEPROM驱动架构
  1. 文件目录管理

EEPROM目录结构

备注

外设驱动中 尽量避免对 HAL 接口的调用,原因是 HAL 接口内部无防重入保护,多个任务直接调用时可能会产生资源访问冲突或死锁问题。