TPARTNO in romtable for nrf52/51 series

Hello everyone.

I'm currently implementing a target autodetect for a debugging toolkit. The basic identification is done by reading out the class 1 romtable to get the manufacturer jedec and part id.

The part id is what I'm interested in because I can't find any info on this for the 51/52 series.

The nrf5340 spec includes information about this value which there is called TPARTNO, has a value of 0x7 and matches the rom table identification data. It is presumably included specifically because of multidrop. 

Testing so far seems to yield different id's for 51/52 models:

nrf51822 0x1

nrf52840 0x8

nrf52832 0x6

Are those values documented somewhere? 

The main goal is to at least differentiate the series with this value as the FICR register has a different base address on nrf53 vs nrf 52/51 and a different layout between 51 and 52. Matching the different model variants will then be done by reading the FICR register contents. 

The nrf51 FICR.CONFIGID register is also not entirely clear to me. It appears that it can be used to read out the device variant like FICR.INFO.VARIANT does for 52/53 series. However, I can't find any value mapping for this register in the documentation which explains which value corresponds to which model variant. Any clarification on this would also be appreciated.

Regards,

Thierry

  • Hi, 

    I think you can use nRF52832 INFO.PART and nRF52840 INFO.PART. That should be enough. 

    Regards,
    Amanda

  • Hello Amanda.

    Thanks for your help. I know about those registers but they are of no use for me, at least if I want a clean solution without trying to read out addresses that may not return the expected value (base address and layout of ficr is different for 51/51 vs 53 series)

    In general a debugger needs to have some basic means of device identification, which can be done by using the peripheral identification registers of a debug component described in ADIv5.2 section D1.2.2 (I'm after the PART_1 and PART_0 values which result in the abovementioned values) (This is also how we find out the manufacturer of the device to call the appropriate target detection subroutines). However, a multitude of manufacturers seem to use those vastly different. For example: STM fills these registers with "unique" part id's that more or less identify certain subfamilies, while samd/e/10/11/21/51/53/54 all have the same value of 0xcd0 to indicate that a DSU is present. Both cases enable me to identify the proper way to handle device identification without having to guess where the relevant registers may reside. Given the values differ between several nrf models I own, I assume that nordic as well has some kind of system in place. I just can't find any info on it to find out whether it is suitable for my needs.

    There's also the DPv2 registers (ADIv5.2 section B2.1.4) which seem to be used by the nrf5340 which should allow for a more unified device identification procedure, but those do not seem to be that widespread among mcu's for now at least.

    Worst case, if I can't use the peripheral device id, I have to use the part registers you mentioned and just read all possible addresses to find the actual register containing a valid part id. For now I'd just like to find out whether a cleaner way is possible just like with stm or samd targets using the peripheral part id of the romtable.

    Regards,

    Thierry

  • Hi, 

    The team confirmed the numbers provided by you match the expected numbers. I have raised a request to update the PS. Thanks for the feedback. 

    -Amanda 

Related