当前文档版本为 v1.2.0,您可以访问当前页面的 开发中 版本以获取最近可能的更新。

ZDK 整体框架介绍

1 简介

PAN1080 ZDK 基于开源实时操作系统 Zephyr OS 修改而来(目前使用的 Zephyr 内核版本为 v2.7.0-lts)。

Zephyr OS 是一个内存占用极低的内核,它主要设计用于资源受限系统:从简单的嵌入式环境传感器、LED 可穿戴设备,到复杂的智能手表、IoT 无线网关。有关 Zephyr-v2.7.0 的详细介绍,请参考官方文档:Zephyr Project Documentation

image

Zephyr OS 整体框架

为了方便开发,我们对 Zephyr 进行了裁剪,只保留了 arm 架构,去掉了 PAN1080 不支持的子系统,添加了 PAN1080 BLE Controller 支持等,并适配了 VS Code 集成开发环境。

PAN1080 SDK 源码树结构如下:

<home>/01_SDK
├─.west
├─bootloader
├─build
├─modules
├─zephyr
└─PAN1080 SDK CLI
  • .west:west 配置文件

  • bootloaderbootloader 程序源码(mcuboot

  • build:编译时自动生成,包含 VS Code 的 .code-workspace 工程文件及 zephyr 子目录下载烧录相关的 .bin.elf.hex 文件

  • modules:必要的一些模组,包括:PAN1080 外设驱动库、BLE Controller 库等

  • zephyr:zephyr 主文件夹,包括:zephyr OS Kernel、板级适配、演示例程、测试用例等

  • PAN1080 SDK CLI:快捷方式,用以启动 PAN1080 ZDK 命令行终端

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 Package

  • soc:存放芯片 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

gatt.c

CONFIG_BT_GAP_SERVICE=y (default)

GATT Service Changed

gatt.c

CONFIG_BT_GATT_SERVICE=y (default)
CONFIG_BT_GATT_SERVICE_CHANGED=y (default)

源码路径:<home>/01_SDK/zephyr/subsys/bluetooth/services

GATT Service

File

Configuration

BAS (Battery Service)

bas.c

CONFIG_BT_BAS=y

TPS (TX Power Service)

tps.c

CONFIG_BT_TPS=y

HRS (Heart Rate Service)

hrs.c

CONFIG_BT_HRS=y

DIS (Device Information Service)

dis.c

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

cfg_cli.c

CONFIG_BT_MESH_CFG_CLI=y

Configuration Server model

cfg_srv.c

-

Health Client model

health_cli.c

CONFIG_BT_MESH_HEALTH_CLI=y

Health Server model

health_srv.c

-

源码路径:<home>/01_SDK/zephyr/subsys/bluetooth/mesh_models/sig_models

Mesh Model

File

Configuration

SIG OTA Server model

blob_srv.c

CONFIG_BT_MESH_SIG_OTA_SRV=y

PB Remote Server model

remote_srv.c

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

ptv_srv.c

CONFIG_BT_PAN_MESH_MODELS=y
CONFIG_BT_MESH_PTV_SRV=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 分区大小:

image

Zephyr 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 使用

image

Zephyr SRAM 区域划分