介绍
SVD(System View Description) 文件是 CMSIS(Common Microcontroller Software Interface Standard) 中的定义的一个 XML 格式的纯文本文件,其包含了芯片内核、芯片所具有的外设以及内核和外设的寄存器的完整描述(详细到寄存器的每个 BIT 位)。
CMSIS 本身主要是针对 ARM 自家 Cortex 架构的,但是 CMSIS 足够开放,其他架构基本也可以模仿。因此,我们的 RISC-V 架构的芯片同样可以使用 SVD 文件。唯一需要注意的是 <cpu> 中的 <name> 填写 other 就可以了,其他填写规则与 ARM 一样即可(以下仅仅是个示例)。
用途
目前,SVD 主要有以下两大用途。
生成 芯片.h
SVD 文件的内容足够详细,以至于使用相关工具命令(SVDConv.exe UX600.svd -o Output -b Output/UX600.log --generate=header)就可以根据编写的 SVD 文件直接生成芯片的顶级头文件(UX600.svd --> UX600.h)。
注意,随着 CMSIS 规范的升级,SVD 文件内容及相应的工具出现了一些差异,尤其是生成的芯片头文件的代码格式。因此,我将两个版本的 SVD 独立保留。理论上,SVD 文件是向后兼容的,因此,这两个版本下的 SVD 基本是一致的,随便选择一个使用即可。
调试
SVD 文件最主要的目的是调试时直接显示寄存器的每个比特位的状态。由于 ARM 在嵌入式领域的统治地位,目前,几乎所有主流嵌入式开发工具(部分可能需要依赖插件)均支持在调试时动态解析 SVD 文件。例如 Eclipse 中的使用效果如下:
注意,不同于 Keil 和 IAR 等,Eclipse 不支持实时显示寄存器值。因此,需要暂停程序执行后才可以查看寄存器值。
CMSIS
Open-CMSIS-Pack Project
现在,ARM 牵头成了 Open-CMSIS-Pack Project,将 CMSIS-Pack 升级为一个开放的标准,以此来标准化嵌入式代码的分发。Open-CMSIS-Pack 定义了一个芯片要提供的开发包需要包含哪些目录和文件以及如何打包发布。
Open-CMSIS-Pack Project 目前由 Linaro 与 Arm、NXP 和 ST 合作,作为孵化项目进行托管和管理。相关标准及工具都托管于 Github 仓库,主要由以下部分内容
Open-CMSIS-Pack-Spec
规范源码:https://github.com/Open-CMSIS-Pack/Open-CMSIS-Pack-Spec
在线文档:https://open-cmsis-pack.github.i ... ain/html/index.html
相关工具
源码仓库:https://github.com/Open-CMSIS-Pack/devtools
实用程序:预编译的可执行程序见仓库发布页面
CMSIS Version 5
现在,ARM 自家的内核软件包(本身就被称为 CMSIS)也是根据 Open-CMSIS-Pack 制定的规范来发布的。CMSIS-Pack 中包含了大量的模板,在芯片厂商发布的软件包中,部分内容才会被实现。
源码仓库:https://github.com/ARM-software/CMSIS_5
在线文档:https://arm-software.github.io/C ... ral/html/index.html
实用工具:包含于 CMSIS-Pack 的 CMSIS/Utilities 中,内含 SVD 转换工具,PACK 检测工具。实际就是从 https://github.com/Open-CMSIS-Pack/devtools 直接拿过来的。
CMSIS Version 4
CMSIS 原本是 ARM 自家为了自己的 Cortex-M 核制定的一些列规范。旧版本的 CMSIS 也是采用 CMSIS-Pack 发布,但是部分模块没有提供源码。旧版已经不再维护,但是目前有部分芯片软件包还在使用旧版规范及相关工具。
源码仓库:https://github.com/ARM-software/CMSIS
在线文档:https://arm-software.github.io/C ... ral/html/index.html
实用工具:包含于 CMSIS-Pack 的 CMSIS/Utilities 中,内含 SVD 转换工具,PACK 检测工具。这里面是旧版工具!
使用
目前,绝大多数嵌入式开发工具都支持手动导入 SVD 文件。部分工具(例如,Keil)也使用二进制的 SFR 文件,需要使用命令 SVDConv.exe UX600.svd --generate=sfr -o Output 手动将 SVD 文件转换为二进制的 SFR 文件。
SfrCC2.Exe 就来自于 Keil
eclipse
调试配置界面有专门的 TAB 页来运行用户指定 SVD 文件,如下图所示:
进入调试界面,就可以在 Peripherals 标签下,看到我们添加的外设,选中想要查看的外设,就可以显示外设寄存器。
错误检查
SVD 文件是一个 XML 格式的文本文件,可以使用任何编辑器进行编辑。并且,通过使用以下命令可以检查我们写的 SVD 文件是否有错误:
执行 SVDConv.exe UX600.svd -o Output -b Output/UX600.log 确保 0 错误 0 警告
执行 SVDConv.exe UX600.svd --generate=sfr -o Output 确保 0 错误 0 警告
|