使用VS Code
进行嵌入式开发之pyocd
手动安装pack
前言
由于工作的原因目前开始逐步使用VS code
进行嵌入式开发,嵌入式的开发自然少不了程序的在线调试与仿真,目前对应ARM
系列的芯片使用的工具为DAP-LINK
,在VS Code
中使用pyocd进行连接调试。但是在pyocd
官方支持的单片机型号往往不包含一些不怎么常用的单片机,所以需要手动的安装一下对应单片机的pack
文件,以便使用更多的单片机型号,特别是国产的单片机。
添加常规单片机支持的方法
常规的添加新的单片机的支持的方法就比较简单了,首先可以通过以下指令查询一下需要添加的单片机是否已经支持了:
pyocd pack -f gd32f303CB
查询结果如下:
Y:\>pyocd pack -f gd32f303CB
Part Vendor Pack Version Installed
---------------------------------------------------------------------------
GD32F303CB GigaDevice GigaDevice.GD32F30x_DFP 2.2.1 False
这就说明pyocd
已经支持gd32f303CB这个型号的单片机了。这样直接通过指令安装就可以使pyocd
支持gd32f303CB
这个型号型号的单片机了.具体指令如下:
pyocd pack -i gd32f303CB
安装结果下:
Y:\>pyocd pack -i gd32f303CB
Downloading packs (press Control-C to cancel):
GigaDevice.GD32F30x_DFP.2.2.1
之后再使用pyocd pack -f gd32f303CB
指令查询一下如下:
Y:\>pyocd pack -f gd32f303CB
Part Vendor Pack Version Installed
---------------------------------------------------------------------------
GD32F303CB GigaDevice GigaDevice.GD32F30x_DFP 2.2.1 True
可以看到Installed列已经是True了,说明已经安装成功了,pyocd
也就已经支持gd32f303CB
这个芯片的调试了.
添加非pyocd
自带的单片机支持的方法
现在要添加一款非pyocd
自带的单片机的支持,比如单片机HK32F030C8.同样的方法可以通过以下指令查询一下需要添加的单片机是否已经支持了:
pyocd pack -f HK32F030C8
查询结果如下:
0001065 W No matching devices. Please make sure the pack index is up to date. [pack_cmd]
Part Vendor Pack Version Installed
----------------------------------------------
PS Y:\>
由此可见pyocd
并没有检索出HK32F030C8.
上面的GD32F303CB可以识别到,而现在的HK32F030C8确没有,那pyocd
是靠什么识别到它是否支持对应的芯片的呢?
逐个测试pyocd
的各个指令,发现其中pyocd pack show
指令打印内容如下:
PS Y:\> pyocd pack show
Pack Version
--------------------------------------
GigaDevice.GD32F30x_DFP 2.2.1
Keil.STM32F0xx_DFP 2.1.1
通过pyocd pack show
指令可以看到支持的芯片的PACK列表.既然是这样那这些列表肯定是存储在电脑的某个位置,于是全盘检索GD32F30x_DFP
,结果在C:\Users\<user name>\AppData\Local\cmsis-pack-manager\cmsis-pack-manager\GigaDevice\GD32F30x_DFP
目录检索到对应的文件.
所以可以看出pyocd
支持的PACK
文件就是安装在了C:\Users\<user name>\AppData\Local\cmsis-pack-manager\cmsis-pack-manager\
目录下面.而这个目录里面每一个PACK
有一个对应的文件夹,比如GigaDevice.GD32F30x_DFP
对应文件夹GigaDevice
,文件夹里面放了一个文件夹GD32F30x_DFP
里面放一个文件2.2.1.pack
,Keil.STM32F0xx_DFP
对应文件夹Keil
,文件夹里面放了一个文件夹STM32F0xx_DFP
里面放一个文件2.1.1.pack
.
既然是这样,那就下载一个HK32F030C8
的对应的PACK
,然后按照上面的方法建立一个文件夹,之后pyocd
就可以识别了?
找来HK32F030C8
的PACK
文件HKMicroChip.HK32F0xx_DFP.1.0.8.pack
,所以在C:\Users\<user name>\AppData\Local\cmsis-pack-manager\cmsis-pack-manager\
目录中新建一个文件夹HKMicroChip',文件内在建一个文件夹
HK32F0xx_DFP’,之后把pcak
文件拷贝进去并改名为1.0.8.pack
.
搞完这些后再使用pyocd pack -f HK32F030C8
指令检索,发现仍然不能识别到对应的系列单片机.
细致查看了C:\Users\<user name>\AppData\Local\cmsis-pack-manager\cmsis-pack-manager\
文件夹里面有两个json
文件,一个是index.json
、另一个是aliases.json
.其中index.json
文件中罗列了很多单片机的型号,看样子是应该需要再这个文件里面添加对应的型号,pyocd
才能识别出来,那我们要添加的是HK32F030
系列的单片机,再文件中找了下存在STM32F030
系列的单片机,那就照着格式复制一份改下名字.复制的内容如下:
"name": "STM32F030C8Tx",
"memories": {
"IROM1": {
"p_name": null,
"access": {
"read": true,
"write": false,
"execute": true,
"peripheral": false,
"secure": false,
"non_secure": false,
"non_secure_callable": false
},
"start": 134217728,
"size": 65536,
"startup": true,
"default": true
},
"IRAM1": {
"p_name": null,
"access": {
"read": true,
"write": true,
"execute": false,
"peripheral": false,
"secure": false,
"non_secure": false,
"non_secure_callable": false
},
"start": 536870912,
"size": 8192,
"startup": false,
"default": true
}
},
"algorithms": [
{
"file_name": "CMSIS/Flash/STM32F0xx_64.FLM",
"start": 134217728,
"size": 65536,
"default": true,
"ram_start": null,
"ram_size": null,
"style": "Keil"
},
{
"file_name": "CMSIS/Flash/STM32F0xx_OPT.FLM",
"start": 536868864,
"size": 16,
"default": false,
"ram_start": null,
"ram_size": null,
"style": "Keil"
}
],
"processors": [
{
"core": "CortexM0",
"fpu": "None",
"mpu": "NotPresent",
"ap": 0,
"dp": 0,
"apid": null,
"address": null,
"svd": "CMSIS/SVD/STM32F0x0.svd",
"name": null,
"unit": 0,
"default_reset_sequence": null
}
],
"from_pack": {
"vendor": "Keil",
"pack": "STM32F0xx_DFP",
"version": "2.1.1",
"url": "https://www.keil.com/pack/"
},
"vendor": "STMicroelectronics:13",
"family": "STM32F0 Series",
"sub_family": "STM32F030"
},
根据注释的逐个修改为我们需要的参数,修改后如下:
"name": "HK32F030R8T6",
"memories": {
"IROM1": {
"p_name": null,
"access": {
"read": true,
"write": false,
"execute": true,
"peripheral": false,
"secure": false,
"non_secure": false,
"non_secure_callable": false
},
"start": 134217728,
"size": 65536,
"startup": true,
"default": true
},
"IRAM1": {
"p_name": null,
"access": {
"read": true,
"write": true,
"execute": false,
"peripheral": false,
"secure": false,
"non_secure": false,
"non_secure_callable": false
},
"start": 536870912,
"size": 10240,
"startup": false,
"default": true
}
},
"algorithms": [
{
"file_name": "Flash/HK32F0xx_64.FLM",
"start": 134217728,
"size": 16384,
"default": true,
"ram_start": null,
"ram_size": null,
"style": "Keil"
},
{
"file_name": "Flash/HK32F0xx_OPT.FLM",
"start": 536868864,
"size": 68,
"default": false,
"ram_start": null,
"ram_size": null,
"style": "Keil"
}
],
"processors": [
{
"core": "CortexM0",
"fpu": "None",
"mpu": "NotPresent",
"ap": 0,
"dp": 0,
"apid": null,
"address": null,
"svd": "SVD/HK32F030x.svd",
"name": null,
"unit": 0,
"default_reset_sequence": null
}
],
"from_pack": {
"vendor": "HKMicroChip",
"pack": "HK32F0xx_DFP",
"version": "1.0.8",
"url": "http://www.hsxp-hk.com/companyfile/2/"
},
"vendor": "HK_MicroChip:160",
"family": "HK32F0 Series",
"sub_family": "HK32F030"
}
具体里面的参数可以参考PCAK文件中的HKMicroChip.HK32F0xx_DFP.pdsc
文件,修改完成后再使用pyocd pack -f HK32F030C8
查询,结果如下:
Part Vendor Pack Version Installed
--------------------------------------------------------------------------------
HK32F030C8T6 HK_MicroChip HKMicroChip.HK32F0xx_DFP 1.0.8 False
OK,可以正常识别了,但是显示Installed
为False
,那就需要安装一下,使用指令pyocd pack install HK32F030C8
进行安装,
PS Y:\> pyocd pack install HK32F030C8
Downloading packs (press Control-C to cancel):
HKMicroChip.HK32F0xx_DFP.1.0.8
OK,看样子是安装成功了.
完成后再使用pyocd pack -f HK32F030C8
查询,结果如下:
Part Vendor Pack Version Installed
--------------------------------------------------------------------------------
HK32F030C8T6 HK_MicroChip HKMicroChip.HK32F0xx_DFP 1.0.8 False
看结果Installed
还是显示为False
,但是测试使用pyocd
对HK32F030C8下载仿真都是正常了,不知道为何这里没有显示为ture
.但是目前至少可以正常使用pyocd
对后续HK32F030C8芯片进行各种操作了.后续有时间再研究下pyocd
的源码看看Installed
显示未为False
是啥原因.
以上所有都是个人的学习笔记,若有错误的地方欢迎大家指点。
**知识就是财富,每次积累一点点,终究会有质的飞跃。 **
幽灵