SWRA466D February   2015  – August 2021 CC1310 , CC1310 , CC1352R , CC1352R , CC2538 , CC2538 , CC2620 , CC2620 , CC2630 , CC2630 , CC2640 , CC2640 , CC2640R2F , CC2640R2F , CC2640R2F-Q1 , CC2640R2F-Q1 , CC2642R , CC2642R , CC2642R-Q1 , CC2642R-Q1 , CC2650 , CC2650 , CC2650MODA , CC2650MODA , CC2652R , CC2652R , CC2652R7 , CC2652R7 , CC2652RB , CC2652RB , CC2652RSIP , CC2652RSIP

 

  1.   Trademarks
  2. 1Introduction
  3. 2ROM Bootloader
    1. 2.1 Configuring the Bootloader
      1. 2.1.1 CC2538
      2. 2.1.2 CC26x0
    2. 2.2 CC26x2
    3. 2.3 Communication Protocol
      1. 2.3.1 ACK/NACK
    4. 2.4 Interface Configuration
      1. 2.4.1 Hardware Pins
      2. 2.4.2 UART Configuration
      3. 2.4.3 Establishing Communication
      4. 2.4.4 Status Command
  4. 3Serial Bootloader Library (SBL)
    1. 3.1 SBL Return Values
    2. 3.2 SBL API
      1. 3.2.1 Device-Specific Functions
  5. 4Example Project
    1. 4.1 Hardware Setup
      1. 4.1.1 SmartRF06EB Virtual COM Port
        1. 4.1.1.1 External Serial Interface
      2. 4.1.2 LaunchPad Virtual COM Port
      3. 4.1.3 Bootloader Backdoor
    2. 4.2 Software Setup
      1. 4.2.1 Device Type
      2. 4.2.2 Baud Rate
    3. 4.3 Program Flow
      1. 4.3.1 Enumerate COM Ports
      2. 4.3.2 Create Device
      3. 4.3.3 Connect
      4. 4.3.4 Erase Flash Range
      5. 4.3.5 Write Flash Range
      6. 4.3.6 Calculate CRC32
      7. 4.3.7 Reset
  6. 5References
  7. 6Revision History

Calculate CRC32

To verify that the firmware was successfully programmed into the Flash memory, the SBL function calculateCrc32 can be used to get a CRC32 checksum of a specified part of the Flash memory from the bootloader. The calculateCrc32 function uses the command CMD_CRC32 together with a start address and the number of bytes to include in the CRC32 checksum.

For CC26x0 and CC26x2, the bootloader also expects a read repeat count. Setting this to 0x00000000 ensures that the data locations are only read once.

The CC2538, CC26x0, and CC26x2 bootloaders uses the CRC-32-IEEE 802.3 with the following polynomial to calculate CRC checksum.

CRC32poly = x32 + x26 + x23 + x22 + x16 + x12 + x11 + x10 + x8 + x7 + x5 + x4 + x2 + x + 1

An example of how to calculate the checksum using the CRC32poly is implemented in the SBL example project. The sequence chart for the calculateCrc32 function is shown in Figure 4-7.

GUID-31495E5D-6366-43FF-8C42-6D9685509E2D-low.gifFigure 4-7 Sequence Chart for CRC32 Command