This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

CC3220SF: Identify type of cc/product with bootloader

Part Number: CC3220SF
Other Parts Discussed in Thread: CC3235MODSF, CC3200MOD, CC3235MODASF, CC3200, CC3220S, CC3235S, UNIFLASH, CC3220MOD

Hi,

We are currently migrating a few of our devices from the CC3200MOD and CC3220MODASF to the CC3235MODSF. I want our programming tool to detect which device it is connected to.

Is it possible to detect which chip it is connected to using the bootloader?

 

I see that the bootloader version seems ok to discriminate between them, but could it change?


First line is before switch to apps, second line is after switch to apps.

CC3200MOD
(bootloader=(0, 4, 1, 2), nwp=(0, 0, 0, 0), mac=(0, 0, 0, 0), phy=(0, 0, 0, 0), chip_type=(16, 0, 0, 0))
(bootloader=(0, 4, 0, 2), nwp=(0, 0, 0, 0), mac=(0, 0, 0, 0), phy=(0, 0, 0, 0), chip_type=(16, 0, 0, 0))

CC3235MODSF
(bootloader=(1, 0, 0, 4), nwp=(0, 0, 0, 0), mac=(0, 0, 0, 0), phy=(0, 0, 0, 0), chip_type=(25, 49, 0, 0))
(bootloader=(5, 0, 0, 4), nwp=(0, 0, 0, 0), mac=(0, 0, 0, 0), phy=(0, 0, 0, 0), chip_type=(25, 49, 0, 0))

CC3220MODASF
(bootloader=(0, 1, 0, 3), nwp=(0, 0, 0, 0), mac=(0, 0, 0, 0), phy=(0, 0, 0, 0), chip_type=(25, 49, 0, 0))
(bootloader=(1, 1, 0, 3), nwp=(0, 0, 0, 0), mac=(0, 0, 0, 0), phy=(0, 0, 0, 0), chip_type=(25, 49, 0, 0))

And we are going to have two products with the CC3235MODASF, it there a way to distinguish between them using the bootloader ?

  • I would have liked to be able to read a "read-only" file but that does not seem possible in production mode https://e2e.ti.com/support/wireless-connectivity/wifi/f/968/t/730670
  • I could of course depend on my firmware to output something to the console to detect which device it is, but there are obvious issues with this method.
  • Any other idea?

Thanks,

Cédric

  • Hi Cedric,

    Take a look at our Embedded Programming guide. Specifically, the "Target Detection" section (get version info command). This is what you can reliably use to distinguish between IC versions while communicating with the bootloader.

    For the modules, you can identify the IC type used by the module. There isn't a special ID to distinguish between the module type though. For example, a CC3220MODSF and CC3220MODASF would look the same.

    Edit: Forgot to link the guide. Here you go: http://www.ti.com/lit/swpa230

    Best Regards,

    Ben M

  • Hi Ben,

    Thanks for the feedback.

    Is there a way to identify the generation of the chip? (cc3200 VS cc3220 VS CC3235). I have not found it in the document you provided.
    For instance can I use the bootloader version? I have not found any description of what the 4 bytes means (e.g. for cc3235: 1, 0, 0, 4)

    Best regards,
    Cédric
  • Hi Cedric,

    The same get version info command will work with the CC3200 device. The "chip type" in the response should be different for a CC3200 vs. CC3220 vs. CC3235. Otherwise, you can rely on the NWP version to differentiate. The NWP version should always start wit 2.x for CC3200, 3.x for CC3220 devices, and 4.x for the CC3235.

    I expect that the bootloader version is different between the devices, but I can't provide a description of what the bytes mean and I don't recommend it be used for detecting the device type.

    Best Regards,
    Ben M
  • Hi Ben,

    The issue is that I don't see the different chip type nor the nwp version when reading the values.

    See what I get:

    First line is before switch to apps, second line is after switch to apps.

    CC3200MOD
    (bootloader=(0, 4, 1, 2), nwp=(0, 0, 0, 0), mac=(0, 0, 0, 0), phy=(0, 0, 0, 0), chip_type=(16, 0, 0, 0))
    (bootloader=(0, 4, 0, 2), nwp=(0, 0, 0, 0), mac=(0, 0, 0, 0), phy=(0, 0, 0, 0), chip_type=(16, 0, 0, 0))

    CC3235MODSF
    (bootloader=(1, 0, 0, 4), nwp=(0, 0, 0, 0), mac=(0, 0, 0, 0), phy=(0, 0, 0, 0), chip_type=(25, 49, 0, 0))
    (bootloader=(5, 0, 0, 4), nwp=(0, 0, 0, 0), mac=(0, 0, 0, 0), phy=(0, 0, 0, 0), chip_type=(25, 49, 0, 0))

    CC3220MODASF
    (bootloader=(0, 1, 0, 3), nwp=(0, 0, 0, 0), mac=(0, 0, 0, 0), phy=(0, 0, 0, 0), chip_type=(25, 49, 0, 0))
    (bootloader=(1, 1, 0, 3), nwp=(0, 0, 0, 0), mac=(0, 0, 0, 0), phy=(0, 0, 0, 0), chip_type=(25, 49, 0, 0))

    Is there a special command other than 0x2F "Get Version Info"?

    Sorry for my late reply (due to holidays ; ) )

    Best regards,

    Cédric

  • Hi Cedric,

    I apologize for the delay on my end. I've been out of the office tending to some other urgent matters. I expect I'll be able to get back to this early next week.

    Best Regards,

    Ben M

  • Hi Cedric,


    Can you double check your connections and the result of the Get Version command? The CC3235S/SF devices should have chip id = 0x31, 0x10, 0x00, 0x18/0x19. The CC3220S/SF devices should have chip id = 0x30, 0x00, 0x00, 0x18/0x19.

    I just checked this with the sl_DeviceGet() call and the Version option. 

    Not sure why the bootloader command would return a different value than that API call. If it really is returning something different, then I guess bootloader version (prior to switch to apps) will suffice for differentiating.

    Or perhaps that could be another alternative. Both devices use the same host driver, so you could have a single simplified image that only starts the device and calls that function to read back the chip id to detect the type.

    Best,
    Ben M

  • Hi Ben,

    Thanks for your feedback!

    I tried with sl_DeviceGet as well, they are indeed different, but not when read with the bootloader.

    sl_deviceGet() bootloader
    CC3220MODASF 0x31 0x00 0x00 0x19 0x19 0x31 0x00 0x00
    CC3235MODSF 0x31 0x10 0x00 0x19 0x19 0x31 0x00 0x00

    To read with the bootloader I send the opcode 0x2F, and read the response's data as explained in the Embedded Programming:

    length 
    checksum
    bootloader = tuple(data[0:4])
    nwp = tuple(data[4:8])
    mac = tuple(data[8:12])
    phy = tuple(data[12:16])
    chip_type = tuple(data[16:20])

    I can manage to differentiate both chips with other means on my boards, but it's simpler to just ask the chip ; )

    Can you check with the bootloader team if it's a bug?

    Best regards,

    Cédric

  • Hi Cédric,

    I have replicated what you're seeing with my CC3220mod and CC3235mod launchpads, where the chip ID is reported as 0x19, 0x31 for both devices. It seems like tools such as Uniflash use the bootloader version to distinguish between the different parts in the CC32xx family, and so given that our tools use the bootloader version to differentiate the CC3220 from the CC3235 that will most likely be what your production line code will need to use as well.

    I am still investigating why the chip ID is the same between the CC3220 and the CC3235, and I will let you know once I have some more information on that.

    Regards,

    Michael

  • Hi Michael,

    I'm glad you could reproduce it. 

    In the meantime, I'll use the bootloader version. Thanks!

    Best regards,

    Cédric