The TI E2E™ design support forums will undergo maintenance from Sept. 28 to Oct. 2. If you need design support during this time, contact your TI representative or open a new support request with our customer support center.

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.

CC2540: Read Chip ID

Part Number: CC2540
Other Parts Discussed in Thread: CC2541, , CC-DEBUGGER

Hi,

Good Day.

Customer would like to read chip ID on a board connected to a PC by CCDebugger by using the SmartRFProgConsole.exe

He have two different programs: one for a CC2540 and the other for a CC2541 so he want to automatically detect the chip and program it with the right program.

Please advise. Thank you very much.

Best Regards,

Ray Vincent

  • Hi,

    The register CHIPID (0x624A) contains the Chip identification number and can be leveraged in order to assess if the device is a CC2540 or CC2541.

    The debug command GET_CHIP_ID allows to read the content of the previously mentioned register:

    I hope this will help,

    Best regards,

  • Hi Clement,

    Good Day. Thanks for your answer, but how do we issue a debug command in general and GET_CHIP_ID specifically? Please advise.

    Best Regards,

    Ray Vincent

  • Hi Ray,

    There is a list of possible SmartRFProgConsole commands on this E2E thread

    SmartRFProgConsole [Target][Actions][File][Interface Slow][Change / IEEE address][Flash lock][Bootloader ID]
    The order of the parameters is irrelevant.
    
    Target: [S][AU][AS][B]
    S     System-on-Chip (programmed via USB)
          Type S(n), where n is the board ID number, to select a specific EB.
          Otherwise, if there are multiple boards, the one to be programmed will be
          selected at random.
    AU    EB application (programmed via USB)
          Type AU(n), where n is the board ID number, to select a specific EB.
          Otherwise, if there are multiple boards, the one to be programmed will be
          selected at random.
    AS(n) EB application (programmed via the EC2 adapter on serial port COMn).
          (only SmartRF04EB)
    B(n)  EB bootloader (programmed via the EC2 adapter on serial port COMn).
          (only SmartRF04EB)
    
    Actions to perform: [P][EP][EPV][EPVC][PV][PVC][V][R][RP][EP][WP][CE]
    P     Program                                                  (all targets)
    EP    Erase and program                                        (all targets)
    EPV   Erase, program and verify                                (all targets)
    EPVC  Erase, program and verify (CRC each page=>faster)        (only target S)
    PV    Program (append) and verify                              (only target S)
    PVC   Program and verify (CRC each page=>faster)               (only target S)
    V     Verify against hex or hem file                         (targets S, AS, B)
    VC    Verify against hex or hem file (CRC each page=>faster) (targets S, AS, B)
    R     Read into hex file                                       (only target S)
    RP=   Read flash page into binary file                         (only target S)
    EP=   Erase flash page                                         (only target S)
    WP=   Write flash page from binary file                        (only target S)
    EWP=  Erase and Write flash page from binary file              (only target S)
    CE    Full chip erase                                          (only target S)
    
    File: F="f"
    "f"   Flash image file name (intel hex file (*.hex), or hex merge file (*.hem))
          A merge file can contain one or more file/change specifications.
          See "example.hem" for how to create one.
    
    Interface Slow(Target = S): [IS]
    IS    Program SoC (System on chip) with reduced speed on the debug interface.
    
    Change hex file before programming (e.g. for serial number): [A=a,D=d][EKF="f"]
    A=a,D=d     Change one or more bytes in the hex file before downloading it.
    a     Hexadecimal address (e.g. 2C03, 01BC25)
    d     One or more bytes to be changed, in hexadecimal format, separated with
          dots (e.g. 4B, 1.2.3.A.B.C, 12.34.56.AB.CD.EF or 12.3.AB)
    EKF   Patch hex file with Encryption Key data.
    "f"   Certificate file from Certicom with encryption key data.
    
    IEEE MAC address related options [KI(F=f)] [RI(F=f,[PRI][SEC])] [WI(F=f,I=i)]
    (only CC243x, CC253x and CC254x)
    KI(F=f)     Keep the IEEE MAC address currently on the chip when programming it
    RI(F=f,[PRI][SEC]) Read out the IEEE MAC address currently on the chip
           For devices with both a primary and a secondary address, the option "PRI"       or "SEC" can be used to specify which to read. "PRI" is default.
    WI(F=f,I=i) Write the given IEEE MAC address to the chip when programming it
    f     The chip's flash size in kB (only used for CC243x)
          CC243x:  32, 64, or 128  (determines the location of the IEEE address)
          CC253x, CC254x:  set to 0        (not used)
    i     IEEE MAC address to write in hexadecimal format, separated
          with dots (e.g. 00.12.4B.00.00.00.00.01).
          8 bytes for CC243x and CC253x, and 6 bytes for CC254x.
    
    Flash lock (Target = S): [L(c)][LB(c)][LD(c)][LA(c)][LP(x-y)][LD][LPD(x-y)]
    "L(c), LB(c), LD(c), LA(c)" only CC243x, cc111x and CC251x. "LP(x-y), LD, LPD(x-y)" only CC253x and CC254x
    c     Code for write protection of the upper section of the flash:
          CC111x, CC251x: 0=All, 1=24 kB, 16 kB,  8 kB, 4 kB, 2 kB, 1 kB, 7=None
          CC2430, CC2431: 0=All, 1=64 kB, 32 kB, 16 kB, 8 kB, 4 kB, 2 kB, 7=None
    L(c)     Write protect section only (L(7) is equal to omitting this parameter)
    LB(c)    Write protect section + boot block
    LD(c)    Write protect section, and block debug commands
    LA(c)    Write protect section + boot block, and block debug commands
    LP(x-y)  Write protect flash pages from page x to page y.
             Several ranges can be given separated with a comma:
             E.g. LP(0-26,48-126), LP(0,1,2,8-10).
    LD       Block debug commands
    LPD(x-y) Write protect flash pages and block debug commands.
    
    Bootloader ID (Target = B): I=i
    i     Becomes the EB ID number when programming new bootloader. Use 1-4 digits
          (e.g. 0123, 3, or 45). Important: EBs that are used on the same computer
          must have unique ID numbers!
    
    Read/Erase/Write Flash page options: RP=n, EWP=n, WP=n, EP=n
    n     The Page number
    
    Examples:
    SmartRFProgConsole S EPV F=C:\test.hex A=135,D="1 23 45"
    SmartRFProgConsole S P F="C:\test.hex"
    SmartRFProgConsole EPV AU(0123) F=D:\Test.hex
    SmartRFProgConsole B(1) EPV "F=C:\Filename with spaces.hex" I=1234
    SmartRFProgConsole S EP F="C:\Test flash lock.hex" LB(3)
    SmartRFProgConsole S EP F="C:\Test flash lock.hex" LD
    SmartRFProgConsole S EP F="C:\Test flash lock.hex" LP(0-126)
    SmartRFProgConsole S EP F="C:\Test flash lock.hex" LPD(0-126)
    SmartRFProgConsole S EPV F="C:\test.hex" WI(F=0,I=00.12.4B.00.00.00.00.01)
    SmartRFProgConsole S EPV F="C:\test.hex" KI(F=1)
    SmartRFProgConsole S EPV F="C:\test.hex" EKF=certificate_example.txt
    SmartRFProgConsole S PVC F="C:\test.hex"
    SmartRFProgConsole S RP=1 F="C:\test.bin"
    SmartRFProgConsole S EP=1
    SmartRFProgConsole S WP=1 F="C:\test.bin"
    SmartRFProgConsole S EWP=1 F="C:\test.bin"
    
    To list all connected EBs/programmers (max 64):
    SmartRFProgConsole X
    
    Status messages are printed to stdout, error messages to stderr.
    
    Return Codes:
          0 = Success
          1 = System error
          2 = Parameter error
          3 = Illegal parameter combinations
          4 = Missing parameters
          5 = Missing image file or communication error

    It does not appear designed to issue GET_CHIP_ID commands or read generic XDATA memory space.  Here too is the SmartRF Flash Programmer User Manual.  They could consider a third-party solution such as cc-tool.

    Regards,
    Ryan

  • Hi Ryan,

    Good Day. Please see below the response of our customer to your reply. Thank you very much.

    What do I need to do in order to be able to read the CHIP_ID from CC2541/CC2540 ? Can it be done by a PC and a CCDebugger ? If not, can it be done by other means? If yes, what hardware do I need and what software do I need and where can I get it?

    Best Regards,

    Ray Vincent

  • GET_CHIP_ID can be used with a PC and the CC-DEBUGGER hardware connected to a CC254x device.  You can view the chip identification with SMARTRFTM-STUDIO or FLASH-PROGRAMMER GUI, but for a command line solution you could consider the cc-tool option previously mentioned.

    Regards,
    Ryan

  • Hi Ryan,

    Good Day. Please see another response from the customer. Thank you very much.

    So there is a command line solution. That's sounds great. You write: "but for a command line solution you could consider the cc-tool option previously mentioned". However, I still don't understand which command line you are referring to. I have no idea what is cc-tool. The only command line tool "previously mentioned" was: SmartRFProgConsole.exe. But you also wrote: "It does not appear designed to issue GET_CHIP_ID commands or read generic XDATA memory space. So please tell me which command line should I use in order to read chip id and which parameters should I use.

    Best Regards,

    Ray Vincent

  • https://manpages.ubuntu.com/manpages/focal/en/man1/cc-tool.1.html 
    https://github.com/dashesy/cc-tool 

    There is a test option which may print target information.  I have not personally tested it.

    Regards,
    Ryan