使用VS Code进行嵌入式开发之pyocd手动安装pack

使用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就可以识别了?

  找来HK32F030C8PACK文件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是啥原因.

  以上所有都是个人的学习笔记,若有错误的地方欢迎大家指点。

  **知识就是财富,每次积累一点点,终究会有质的飞跃。 **

                          幽灵

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值