Implement read device info for NRF5x
This commit is contained in:
parent
3f89fed32e
commit
691ada17e9
|
@ -35,6 +35,7 @@ static bool nrf51_cmd_read_hwid(target *t);
|
|||
static bool nrf51_cmd_read_fwid(target *t);
|
||||
static bool nrf51_cmd_read_deviceid(target *t);
|
||||
static bool nrf51_cmd_read_deviceaddr(target *t);
|
||||
static bool nrf51_cmd_read_deviceinfo(target *t);
|
||||
static bool nrf51_cmd_read_help(target *t);
|
||||
static bool nrf51_cmd_read(target *t, int argc, const char *argv[]);
|
||||
|
||||
|
@ -49,6 +50,7 @@ const struct command_s nrf51_read_cmd_list[] = {
|
|||
{"fwid", (cmd_handler)nrf51_cmd_read_fwid, "Read pre-loaded firmware ID"},
|
||||
{"deviceid", (cmd_handler)nrf51_cmd_read_deviceid, "Read unique device ID"},
|
||||
{"deviceaddr", (cmd_handler)nrf51_cmd_read_deviceaddr, "Read device address"},
|
||||
{"deviceinfo", (cmd_handler)nrf51_cmd_read_deviceinfo, "Read device information"},
|
||||
{NULL, NULL, NULL}
|
||||
};
|
||||
|
||||
|
@ -76,6 +78,15 @@ const struct command_s nrf51_read_cmd_list[] = {
|
|||
#define NRF51_FICR_DEVICEADDR_HIGH (NRF51_FICR + 0x0A8)
|
||||
#define NRF52_PART_INFO (NRF51_FICR + 0x100)
|
||||
#define NRF52_INFO_RAM (NRF51_FICR + 0x10C)
|
||||
/* Device Info Registers */
|
||||
#define NRF51_FICR_DEVICE_INFO_BASE (NRF51_FICR + 0x100)
|
||||
#define NRF51_FICR_DEVICE_INFO_PART NRF51_FICR_DEVICE_INFO_BASE
|
||||
#define NRF51_FICR_DEVICE_INFO_VARIANT (NRF51_FICR_DEVICE_INFO_BASE + 4)
|
||||
#define NRF51_FICR_DEVICE_INFO_PACKAGE (NRF51_FICR_DEVICE_INFO_BASE + 8)
|
||||
#define NRF51_FICR_DEVICE_INFO_RAM (NRF51_FICR_DEVICE_INFO_BASE + 12)
|
||||
#define NRF51_FICR_DEVICE_INFO_FLASH (NRF51_FICR_DEVICE_INFO_BASE + 16)
|
||||
|
||||
#define NRF51_FIELD_UNSPECIFIED (0xFFFFFFFF)
|
||||
|
||||
/* User Information Configuration Registers (UICR) */
|
||||
#define NRF51_UICR 0x10001000
|
||||
|
@ -245,6 +256,56 @@ static bool nrf51_cmd_read_deviceid(target *t)
|
|||
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool nrf51_cmd_read_deviceinfo(target *t)
|
||||
{
|
||||
struct deviceinfo{
|
||||
uint32_t part;
|
||||
union{
|
||||
char c[4];
|
||||
uint32_t f;
|
||||
} variant;
|
||||
uint32_t package;
|
||||
uint32_t ram;
|
||||
uint32_t flash;
|
||||
} di;
|
||||
di.package = target_mem_read32(t, NRF51_FICR_DEVICE_INFO_PACKAGE);
|
||||
di.part = target_mem_read32(t, NRF51_FICR_DEVICE_INFO_PART);
|
||||
di.ram = target_mem_read32(t, NRF51_FICR_DEVICE_INFO_RAM);
|
||||
di.flash = target_mem_read32(t, NRF51_FICR_DEVICE_INFO_FLASH);
|
||||
di.variant.f = target_mem_read32(t, NRF51_FICR_DEVICE_INFO_VARIANT);
|
||||
|
||||
tc_printf(t, "Part:\t\tNRF%X\n",di.part);
|
||||
tc_printf(t, "Variant:\t%c%c%c%c\n",
|
||||
di.variant.c[3],
|
||||
di.variant.c[2],
|
||||
di.variant.c[1],
|
||||
di.variant.c[0]);
|
||||
tc_printf(t, "Package:\t");
|
||||
switch (di.package)
|
||||
{
|
||||
case NRF51_FIELD_UNSPECIFIED:
|
||||
tc_printf(t,"Unspecified\n");
|
||||
break;
|
||||
case 0x2000:
|
||||
tc_printf(t,"QF\n");
|
||||
break;
|
||||
case 0x2001:
|
||||
tc_printf(t,"CI\n");
|
||||
break;
|
||||
case 0x2004:
|
||||
tc_printf(t,"QIxx\n");
|
||||
break;
|
||||
default:
|
||||
tc_printf(t,"Unknown (Code %X)\n",di.package);
|
||||
break;
|
||||
}
|
||||
|
||||
tc_printf(t, "Ram:\t\t%uK\n", di.ram);
|
||||
tc_printf(t, "Flash:\t\t%uK\n", di.flash);
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool nrf51_cmd_read_deviceaddr(target *t)
|
||||
{
|
||||
uint32_t addr_type = target_mem_read32(t, NRF51_FICR_DEVICEADDRTYPE);
|
||||
|
|
Loading…
Reference in New Issue