swd: improve part number decoding
This commit is contained in:
parent
66521e1981
commit
99d66f4e4e
60
lib/swd.c
60
lib/swd.c
@ -340,33 +340,81 @@ const char *swd_jep106_manufacturer(uint8_t bank, uint8_t id)
|
||||
|
||||
static const struct swd_partno_s {
|
||||
uint16_t designer;
|
||||
uint8_t partno;
|
||||
uint16_t partno;
|
||||
uint16_t partno_mask;
|
||||
const char* name;
|
||||
} swd_partno[] = {
|
||||
// based on https://developer.arm.com/docs/103489943/latest/what-is-the-id-code-of-a-cortex-m0-dap-or-cortex-m0-dap
|
||||
{
|
||||
.designer = 0x23B, // ARM
|
||||
.partno = 0xBA,
|
||||
.partno = 0xBA00,
|
||||
.partno_mask = 0xFF00,
|
||||
.name = "CM3DAP", // used in Cortex-M3 and Cortex-M4
|
||||
},
|
||||
{
|
||||
.designer = 0x23B, // ARM
|
||||
.partno = 0xBB,
|
||||
.partno = 0xBB00,
|
||||
.partno_mask = 0xFF00,
|
||||
.name = "CM0DAP", // used in Cortex-M0
|
||||
},
|
||||
{
|
||||
.designer = 0x23B, // ARM
|
||||
.partno = 0xBC,
|
||||
.partno = 0xBC00,
|
||||
.partno_mask = 0xFF00,
|
||||
.name = "CM0PDAP", // used in Cortex-M0+
|
||||
},
|
||||
// based on RM0008 Reference manual, STM32F101xx, STM32F102xx, STM32F103xx, STM32F105xx and STM32F107xx advanced Arm®-based 32-bit MCUs
|
||||
{
|
||||
.designer = 0x020, // ST
|
||||
.partno = 0x6412,
|
||||
.partno_mask = 0xFFFF,
|
||||
.name = "STM32F10xxx low-density",
|
||||
},
|
||||
{
|
||||
.designer = 0x020, // ST
|
||||
.partno = 0x6410,
|
||||
.partno_mask = 0xFFFF,
|
||||
.name = "STM32F10xxx medium-density",
|
||||
},
|
||||
{
|
||||
.designer = 0x020, // ST
|
||||
.partno = 0x6414,
|
||||
.partno_mask = 0xFFFF,
|
||||
.name = "STM32F10xxx high-density",
|
||||
},
|
||||
{
|
||||
.designer = 0x020, // ST
|
||||
.partno = 0x6430,
|
||||
.partno_mask = 0xFFFF,
|
||||
.name = "STM32F10xxx XL-density",
|
||||
},
|
||||
{
|
||||
.designer = 0x020, // ST
|
||||
.partno = 0x6418,
|
||||
.partno_mask = 0xFFFF,
|
||||
.name = "STM32F10xxx connectivity line",
|
||||
},
|
||||
// based on RM0368 Reference manual, STM32F401xB/C and STM32F401xD/E advanced Arm®-based 32-bit MCUs
|
||||
{
|
||||
.designer = 0x020, // ST
|
||||
.partno = 0x6423,
|
||||
.partno_mask = 0xFFFF,
|
||||
.name = "STM32F401xB/C",
|
||||
},
|
||||
{
|
||||
.designer = 0x020, // ST
|
||||
.partno = 0x6433,
|
||||
.partno_mask = 0xFFFF,
|
||||
.name = "STM32F401xD/E",
|
||||
},
|
||||
};
|
||||
|
||||
const char* swd_dpidr_partno(uint16_t designer, uint8_t partno)
|
||||
const char* swd_dpidr_partno(uint16_t designer, uint16_t partno)
|
||||
{
|
||||
uint32_t i = 0; // swd_partno index
|
||||
// find matching part number
|
||||
for (i = 0; i < LENGTH(swd_partno); i++) {
|
||||
if (designer == swd_partno[i].designer && partno == swd_partno[i].partno) {
|
||||
if (designer == swd_partno[i].designer && ((partno & swd_partno[i].partno_mask) == swd_partno[i].partno)) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -199,9 +199,9 @@ uint64_t swd_transaction(uint64_t output, uint8_t bit_count, bool write);
|
||||
const char* swd_jep106_manufacturer(uint8_t bank, uint8_t id);
|
||||
|
||||
/** get DAP name corresponding to the DPIDR part number
|
||||
* @param[in] designer DESIGNER value
|
||||
* @param[in] partno DPIDR part number
|
||||
* @param[in] designer DESIGNER value (bits 1-11 in DPIDR/IDCODE)
|
||||
* @param[in] partno PARTNO part number bits 12-27 in DPIDR/IDCODE)
|
||||
* @return DAP name
|
||||
*/
|
||||
const char* swd_dpidr_partno(uint16_t designer, uint8_t partno);
|
||||
const char* swd_dpidr_partno(uint16_t designer, uint16_t partno);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user