pyocd / cmsis-pack-manager

A Rust and Python module for handling CMSIS Pack files
Apache License 2.0
28 stars 35 forks source link

Handle multiple PDSC entries for a single part in the vendor list #202

Open Oozlum opened 1 year ago

Oozlum commented 1 year ago

I have a problem when using pyOCD with an ATSAMD21G18A chip. The vendor file lists two PDSC entries for that part:

  1. Keil.SAMD21_DFP 1.3.1 (deprecated 2020-10-21)
  2. Microchip.SAMD21_DFP 3.6.144

cmsis-pack-manager seems to key its cache purely off the part number (ATSAMD21G18A), so it is unable to handle multiple entries for the same part. There also doesn't seem to be an option to filter out deprecated entries.

It would be nice if the cache key could be augmented with the vendor (and possibly version) in the event that multiple entries are found, so in this instance I would see two possible entries:

This was a problem for me because cmsis-pack-manager happened to find the Keil entry first, and that PDSC appears to be broken. I couldn't find a way to force the Microchip version other than manually hacking the files.

lukaskuzmiak commented 5 months ago

+1. This is problematic for e.g. CY8C6347FMI-BLD53 that is only found in the old Cypress.PSoC6_DFP 1.2.0 pack and it completely misses the Infineon.CAT1A_DFP.1.5.0.

Both are contained in the cache directory:

% cd ~/Library/Application\ Support/cmsis-pack-manager
% grep -rl CY8C6347FMI-BLD53 .
Cypress.PSoC6_DFP.1.2.0.pdsc
Infineon.CAT1A_DFP.1.5.0.pdsc
Infineon.PSoC6_DFP.1.4.0.pdsc
index.json

But inside of index.json the part CY8C6347FMI-BLD53 only contains a reference to the Cypress' pack.

    "from_pack": {
      "vendor": "Cypress",
      "pack": "PSoC6_DFP",
      "version": "1.2.0",
      "url": "https://github.com/cypresssemiconductorco/cmsis-packs/raw/master/PSoC6_DFP/"
    },

Only half-decent workaround I found was to use the .pack manually within pyOCD. I did not find a way to install the proper Infineon pack within pyOCD as the cache of cmsis-pack-manager does not index it.