SDK 整体框架介绍¶
1 简介¶
PAN1080 SDK 基于开源实时操作系统 Zephyr OS 修改而来(目前使用的 Zephyr 内核版本为 v2.7.0-lts
)。
Zephyr OS 是一个内存占用极低的内核,它主要设计用于资源受限系统:从简单的嵌入式环境传感器、LED 可穿戴设备,到复杂的智能手表、IoT 无线网关。有关 Zephyr-v2.7.0 的详细介绍,请参考官方文档:Zephyr Project Documentation。
为了方便开发,我们对 Zephyr 进行了裁剪,只保留了 arm 架构,去掉了 PAN1080 不支持的子系统,添加了 PAN1080 BLE Controller 支持等,并适配了 VS Code 集成开发环境。
PAN1080 SDK 源码树结构如下:
<home>/01_SDK
├─.west
├─bootloader
├─build
├─modules
├─zephyr
└─PAN1080 SDK CLI
.west
:west 配置文件bootloader
:bootloader
程序源码(mcuboot
)build
:编译时自动生成,包含 VS Code 的.code-workspace
工程文件及 zephyr 子目录下载烧录相关的.bin
、.elf
、.hex
文件modules
:必要的一些模组,包括:PAN1080 外设驱动库、BLE Controller 库等zephyr
:zephyr 主文件夹,包括:zephyr OS Kernel、板级适配、演示例程、测试用例等PAN1080 SDK CLI
:快捷方式,用以启动 PAN1080 SDK 命令行终端
2 Zephyr 目录结构¶
PAN1080 SDK zephyr 源码树结构如下:
<home>/01_SDK/zephyr
├─arch
├─boards
├─cmake
├─doc
├─drivers
├─dts
├─include
├─kernel
├─lib
├─misc
├─modules
├─samples_panchip
├─scripts
├─share
├─soc
├─subsys
└─tests_panchip
arch
:存放芯片 CPU 架构级信息,由于 PAN1080 是 ARM 架构,因此其中只保留了 ARM 架构信息boards
:存放板级信息,比如 PAN1080 各种 EVB 开发板cmake
:存放 CMake 构建 Zephyr App 所需的相关配置和脚本文件doc
:Zephyr 官方文档,其内容与 Zephyr文档官网 中的内容一致drivers
:存放设备驱动代码,例如pan1080 spi驱动文件dts
:存放 DeviceTree(芯片硬件初始化配置) 信息include
:存放 Zephyr 公开的 API 头文件kernel
:存放 Zephyr OS 内核代码lib
:存放库文件,包含一个简单的标准C语言库等misc
:其他一些不便分类的文件modules
:存放关联第三方文件和目录的 modules 目录,提供第三方模块 Kconfig 相关定义途径samples_panchip
:存放 Panchip 提供的 PAN1080 官方例程scripts
:存放编译测试相关的脚本文件share
:存放一些额外的架构无关的数据,目前包含 Zephyr CMake Packagesoc
:存放芯片 SoC 级信息及一些默认配置subsys
:Zephyr 子系统,包括:USB Device Stack(USB 设备栈)、File System(文件系统)、Bluetooth Host and Controller(低功耗蓝牙Host端与Controller端)等实现代码tests_panchip
:存放 Panchip 提供的适配zephyr公开的API测试case
2.1 boards¶
目前 PAN1080 SDK 提供了 2 种板级信息,用于适配不同型号的 EVB 开发板,其结构树如下:
<home>/01_SDK/zephyr/boards
├─arm
├─pan108xxb1_evb
└─pan108xxb5_evb
pan108xxb1_evb
:存放 32 PIN 封装,Flash 大小为 1MB 的 PAN108x SoC 板级配置信息pan108xxb5_evb
:存放 64 PIN 封装,Flash 大小为 1MB 的 PAN108x SoC 板级配置信息
有关 PAN1080 板级信息配置的更多内容请参考:Zephyr Board配置指南。
2.2 drivers¶
PAN1080 SDK 适配的 zephyr 驱动结构树如下:
<home>/01_SDK/zephyr/drivers
├─acc
├─adc
├─console
├─counter
├─flash
├─gpio
├─i2c
├─pinmux
├─pwm
├─qdec
├─serial
├─spi
└─timer
2.3 dts¶
pan1080 SDK DeviceTree初始化配置信息结构树如下:
<home>/01_SDK/zephyr/dts
├─arm
└─panchip
└─pan1080
└─bindings
arm/panchip/pan1080
:存放 PAN1080 芯片硬件初始化配置信息bindings
:bindings 中包含一系列 .yaml 格式的文件,其中描述了 dts 各个节点中各个属性的实际含义
有关DeviceTree的更多内容请参考:Zephyr配置系统指南的Devicetree配置部分介绍。
2.4 samples_panchip¶
PAN1080 SDK 提供驱动及应用相关例程的官方源码,其结构树如下:
<home>/01_SDK/zephyr/samples_panchip
├─basic
├─bluetooth
├─drivers
├─low_power
├─proprietary_radio
├─solutions
└─subsys
basic
:存放基础例程源码bluetooth
:存放蓝牙相关例程源码drivers
:存放外设驱动相关例程源码low_power
:存放低功耗相关例程源码proprietary_radio
:存放 Panchip 2.4G 相关例程源码solutions
:存放应用方案相关例程源码subsys
:存放 Zephyr 子系统(如 USB)相关例程源码
以 basic\blinky
为例:
blinky
├── CMakeLists.txt
├── prj.conf
├── README.rst
└── src
└── main.c
src\main.c
:工程源码prj.conf
:工程配置文件README.rst
:工程说明文档
有关例程的更多内容请参考:PAN1080例程介绍。
2.5 subsys¶
2.5.1 bluetooth¶
Controller
源码路径:<home>/01_SDK/zephyr/subsys/bluetooth/controller_panchip
。
通过 HCI 控制 Controller,启动了两个线程:
controller_thread_data
:controller 中断处理函数recv_thread_data
:接收 controller 上报的 L2CAP、HCI Events 数据
Host
源码路径:<home>/01_SDK/zephyr/subsys/bluetooth/host
。
GATT Services
源码路径:<home>/01_SDK/zephyr/subsys/bluetooth/host
。
GATT Service |
File |
Configuration |
---|---|---|
GAP Service |
|
CONFIG_BT_GAP_SERVICE=y (default) |
GATT Service Changed |
|
CONFIG_BT_GATT_SERVICE=y (default) |
源码路径:<home>/01_SDK/zephyr/subsys/bluetooth/services
。
GATT Service |
File |
Configuration |
---|---|---|
BAS (Battery Service) |
|
CONFIG_BT_BAS=y |
TPS (TX Power Service) |
|
CONFIG_BT_TPS=y |
HRS (Heart Rate Service) |
|
CONFIG_BT_HRS=y |
DIS (Device Information Service) |
|
CONFIG_BT_DIS=y |
Mesh
源码路径:<home>/01_SDK/zephyr/subsys/bluetooth/mesh
。
TBD
Mesh Models
源码路径:<home>/01_SDK/zephyr/subsys/bluetooth/mesh
。
Mesh Model |
File |
Configuration |
---|---|---|
Configuration Client model |
|
CONFIG_BT_MESH_CFG_CLI=y |
Configuration Server model |
|
- |
Health Client model |
|
CONFIG_BT_MESH_HEALTH_CLI=y |
Health Server model |
|
- |
源码路径:<home>/01_SDK/zephyr/subsys/bluetooth/mesh_models/sig_models
。
Mesh Model |
File |
Configuration |
---|---|---|
SIG OTA Server model |
|
CONFIG_BT_MESH_SIG_OTA_SRV=y |
PB Remote Server model |
|
CONFIG_BT_MESH_PB_REMOTE_SRV=y |
Vendor Models
源码路径:<home>/01_SDK/zephyr/subsys/bluetooth/mesh_models/vendor_models
。
Mesh Model |
File |
Configuration |
---|---|---|
Packet Test Vendor Server model |
|
CONFIG_BT_PAN_MESH_MODELS=y |
2.6 tests_panchip¶
PAN1080 SDK 提供 Zephyr 相关接口 API 的测试例程,其结构树如下:
<home>/01_SDK/zephyr/tests_panchip
├─benchmarks
├─bluetooth
├─drivers
├─kernel
└─subsys
benchmarks
:存放 OS 内核相关 API 的性能评估测试代码bluetooth
:存放 Bluetooth API 测试代码drivers
:存放外设驱动 API 测试代码kernel
:存放 OS 内核 API 测试代码subsys
:存放 Zephyr 子系统(如 power management、storage等)API 测试代码
3 SoC 存储空间划分¶
3.1 Flash¶
PAN108x SoC 芯片 Flash,根据型号不同分为 512KB 和 1MB 两种。对于不同大小的 Flash,SDK 默认规划了不同的 Flash 分区大小:
更详细的 Flash 空间分配介绍,请参考 Zephyr Bootloader 开发指南 中的相关内容。
3.2 SRAM¶
PAN108x SoC 有 64KB SRAM 可供 SDK 使用。根据不同的使用场景,SRAM 分配策略会有所差别:
若 Zephyr App 未使能蓝牙功能(即未配置
CONFIG_BT=y
),则 Zephyr App 可使用所有的 64KB SRAM 空间若 Zephyr App 使能了蓝牙功能(即配置了
CONFIG_BT=y
),则 Zephyr App 可使用整块 SRAM 的前 50KB 空间,剩余 14 KB 空间保留给蓝牙 BLE Controller 使用