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.

Where to get full description of register FLASH->CFG



Hi. I create application for СС2650 without CC26xxware and TI-RTOS. The documentation has text "Internal. Only to be used through TI provided API.". What does is mean? For example, see screenshot below. Where can I find a description of these fields?

  • Hello. These fields are defined in the TRM: http://www.ti.com/lit/SWCU117
  • Hmm.

    The document contains the same field description: "DIS_STANDBY" = "Internal. Only to be used through TI provided API.". Can you point page number, where described "FLASH.CFG.DIS_STANDBY" field?

  • These APIs are used by our FLASH driver within the CC26xxware driverlib. I would recommend using at the very least cc26xxware if you want to access those registers.
  • Andrey,

    Several FLASH registers in the CC26XX are set by our boot configuration firmware based on characterization to optimize power consumption. This is done by boot ROM but also by trimDevice() in driverLib/setup.c which runs before main().

    Modifying the value of those registers are not supported by TI and you risk data corruption and device malfunction.

    Regards,
    Svend
  • That's why I asked the question on the forum, because watching the source code СС26xxware. For example from "setup.c":

    // Enable standby in flash bank
    HWREGBITW( FLASH_BASE + FLASH_O_CFG, FLASH_CFG_DIS_STANDBY_BITN ) = 0;

    I began to look in the documentation of the description field "FLASH_CFG_DIS_STANDBY_BITN", but nothing has been found.

    Returning to the theme topic: "Where can I read the description of the register fields are marked in the documentation <Internal. Only to be used through TI provided API.>"?

    P.S. If this private information (description of some fields of registers), then ask you to provide a link to the official document, which described this rule.

    Thanks

  • For example:

    1. "setup.c" (trimDevice)

    // Enable standby in flash bank

    HWREGBITW( FLASH_BASE + FLASH_O_CFG, FLASH_CFG_DIS_STANDBY_BITN ) = 0;

    2. "cpuinfo.c" (GetSupportedProtocol ())

    return ((ProtocolBitVector_t)( HWREG( PRCM_BASE + 0x1D4 ) & 0x0E ));

    What is the "magic numbers" in the code, in which there is no documentation?

    Can you explain for what reasons you don't show documentation for the registers that we use in the library? This incomplete documentation or is there an official document describing your position (confidential information). Maybe we should sign an NDA to gain access to more complete documentation?

  • The disable standby bit will simply allow the flash pump to go to a power saving mode when no reads from flash has happened in a while.
    Generally we hide registers completely that no SW use (test registers etc) and set registers that customers should not use directly as "API only".

    The supported protocols are a bit special since the protocols are defined by what is in ROM of the device (the radio is the same for all 26xx devices). This field would only contain "Protocol 1", "Protocol 2" etc anyway so it is removed. I agree we could have it visible but in practice it doesn't make much difference.
  • So, for each field that is not described in the documentation, I need to speak to you on the forum. This solution, although not ideal.

    Thanks
  • I too was very surprised today to see that many of the registers in the CC13XX / CC26XX reference manual are described as "Internal. Only to be used through TI provided API." Are you saying that CC13XX can only be used by linking TI libraries? If so, this is very disappointing, and is probably a show stopper for my project. I much prefer to write my own drivers and be in full control of these rather resource-limited chips.

    I can only hope that this is a temporary state of affairs -- that a proper reference manual documenting all registers will be written when resources within TI can be allocated to this task.
  • +1

    Several months ago when I started to use CC26xx, I encounter the same issue. I always prefer to design my own library for MCU to optimise the system performance. For CC26xx, I have to include some of the TI APIs just because of undocumented registers. This makes my project a little complicated and difficult to maintain in the future because the project has to reply on TI library.

    I just don't understand why TI won't document those registers.
  • Hi Robert and all,

    The Flash should only be accessed by the API located in ROM. Apart from that, all registers used by TI Drivers and SW should have a description other than "Internal..". If this is not the case please let me know.

    Cheers,
    Fredrik
  • Fredrik,

    In swcu117f, there are currently 1421 matches for "Internal. Only to be used throught TI provided APIs". About half of those matches are outside of the flash section (primarily in PRCM and FCFG sections, but also in several others). Even for flash, I do not understand why the registers cannot be documented. Many modern MCUs have complex flash implementations (various available voltages, caches, power saving modes, etc), but the manufacturers still try to explain them as best as they can.

    Outside of flash, can you honestly say that the reference manual provides enough information on how to do common and reasonably simple things -- such as change the system clock to an external crystal oscillator, send and receive an RF packet, or enter a low power mode?

  • Hi Andrew,

    I guess the description we have on these registers is not very good and we might consider changing it.

    We highly recommend people to use TI-RTOS and our SW drivers. If you for some reason choose not to do so, you should at least use the drivers as a reference together with the TRM. We do know that there are gaps in the manual for people who wants to go bare metal, but all the registers used by our drivers should have documentation. If that is not the case, let me know.

    We are also continuously updating the document. Revision E/F does for example contain a lot of updates of the radio chapter.

    External crystal oscillator is only supported for the 32 kHz clock by the way.

    Cheers,
    Fredrik
  • Hi Andrew,

    Just wanted to elaborate on this a bit to make it clearer why we have hidden several registers.

    When it comes to the CC26XX/CC13XX family we have deliberately not documented a lot of things externally. These registers typically end up in these categories:

    1. Registers from the factory configuration page (FCFG1) set during production test which are used by the boot ROM to configure / trim the device for optimal performance.
    2. Registers from FCFG1 which are used by the initial startup code in flash (driverlib/setup.c - trimdevice() )
    3. Registers from FCFG1 which are used by the radio to optimally configure the analog radio modules for the selected mode
    4. PRCM - unsupported modes (mostly clock division which would complicate peripheral drivers a great deal). Normally it is better to run at full speed and then fully stop the CPU instead once done with a task.
    5. FLASH - flash configuration set up by boot ROM for optimal performance. Cache etc is configured in the VIMS module.

    This device family is very flexible in terms of configuration, therefore also unfortunately quite complex to use. We therefore believe we have given our customers optimal settings for most configuration out of the box by using driverlib and TI RTOS (which includes full peripheral drivers and power/clock management).

    Our current register and software model fits 99% of our users but unfortunately not everyone. However TI would not have the capacity to support users fiddling with a number of critical registers causing issues such as exceptions and data corruption due to the Flash being configured to a mode where it does not work properly.

    Andrew G said:
    Outside of flash, can you honestly say that the reference manual provides enough information on how to do common and reasonably simple things -- such as change the system clock to an external crystal oscillator, send and receive an RF packet, or enter a low power mode?

    Clocks and power management are described in chapter 6 of SWCU117, the radio is described in chapter 23.

    To get a better overview of how everything ties together I recommend to download the latest TI RTOS to have our code available for reference and read through the below link:

    Best regards,
    Svend