|
||
---|---|---|
.. | ||
.ccsproject | ||
.cproject | ||
.project | ||
README.md | ||
flashHercules.ccxml | ||
target.h | ||
target.ld |
README.md
TMS750LC43xx
Prerequisites
Download and install:
- "Code Composer Studio" - https://www.ti.com/tool/CCSTUDIO
- "F021 Flash API - Software" - https://www.ti.com/tool/F021FLASHAPI
Note: Avoid using spaces in the paths. Consider renaming "F021 Flash API" to "F021_Flash_API".
Build
Build from command line (msys, cygwin, etc)
- Setup default configuration:
cp config/examples/ti-tms570lc435.config .config
- Build passing in CCS_ROOT and F021_DIR make variables:
Windows:
make CCS_ROOT=/c/ti/ccs1250/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS F021_DIR=/c/ti/Hercules/F021\ Flash\ API/02.01.01
Mac OS:
make CCS_ROOT=/Applications/ti/ccs1250/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS F021_DIR=/Applications/ti/Hercules/F021_Flash_API/02.01.01
Build using Code Composer Studio (CCS)
Create key or copy if you already have one.
Create key
make -C ./tools/keytools
./tools/keytools/keygen.exe --ecc256 src/ecc256_pub_key.c
Use IDE to build and load wolfBoot bootloader
Running minimal example
Full flash
uniflash can be used to flash the binary from command line.
c:\ti\ccs1031\ccs\ccs_base\scripting\examples\uniflash\cmdLine\uniflash.bat -ccxml "flashHercules.ccxml" -programBin "factory.bin" 0
***** Texas Instruments Universal Flash Programmer *****
<START: 12:45:03 GMT-0700 (PDT)>
> Configuring the Flash Programmer with the given configuration ...
Loaded FPGA Image: C:\ti\ccs1031\ccs\ccs_base\common\uscif\dtc_top.jbc
> Flash Manager is configured for the following part: TMS570LC43xx
> Connecting to the target for Flash operations ...
CortexR5: GEL Output: Memory Map Setup for Flash @ Address 0x0
> Connected.
> Loading Binary file: factory.bin
CortexR5: GEL Output: Memory Map Setup for Flash @ Address 0x0 due to System Reset
CortexR5: Writing Flash @ Address 0x00000000 of Length 0x00007ff0
...
Only erase necessary sectors
c:\ti\ccs1031\ccs\ccs_base\scripting\examples\uniflash\cmdLine\uniflash.bat -ccxml "IDE\CCS\TMS570LC43xx\flashHercules.ccxml" -setOptions FlashEraseSelection="Necessary Sectors Only (for Program Load)" -programBin factory.bin 0
Just update image
c:\ti\ccs1031\ccs\ccs_base\scripting\examples\uniflash\cmdLine\uniflash.bat -ccxml "IDE\CCS\TMS570LC43xx\flashHercules.ccxml" -setOptions FlashEraseSelection="Necessary Sectors Only (for Program Load)" -programBin test-app/image_v1_signed.bin 0x20000
Running other program
In order to load a program built
Application Memory Map
Using Code Composer Studio (CCS) you will need to manually update the
cmd
file. The VECTORS must be at WOLFBOOT_PARTITION_BOOT_ADDRESS + IMAGE_HEADER_SIZE
and all flash sections (VECTORS, KERNEL, FLASH*)
must end before WOLFBOOT_PARTITION_UPDATE_ADDRESS
MEMORY
{
VECTORS (X) : origin=0x00020100 length=0x00000020
KERNEL (RX) : origin=0x00020120 length=0x00007ee0
FLASH0 (RX) : origin=0x00028000 length=(0x100000-0x28000)
STACKS (RW) : origin=0x08000000 length=0x00008000
KRAM (RW) : origin=0x08008000 length=0x00000800
RAM (RW) : origin=(0x08008000+0x00000800) length=(0x00100000 - 0x00008800)
}
Sign output from CCS
In order to generate a signed image, the application is copied to a binary format and signed with the following commands
"c:\ti\ccs1031\ccs\tools\compiler\ti-cgt-arm_20.2.4.LTS\bin\armobjcopy.exe" -O binary application.out application.bin
".\tools\keytools\sign.exe" --ecc256 --sha256 application.bin wolfboot_signing_private_key.der 1
Output should resemble:
Update type: Firmware
Input image: application.bin
Selected cipher: ECC256
Selected hash : SHA256
Public key: wolfboot_signing_private_key.der
Output image: application_v1_signed.bin
Calculating SHA256 digest...
Signing the firmware...
Output image(s) successfully created.
To flash the signed image the following command can be used.
"c:\ti\ccs1031\ccs\ccs_base\scripting\examples\uniflash\cmdLine\uniflash.bat" -ccxml "IDE\CCS\TMS570LC43xx\flashHercules.ccxml" -setOptions FlashEraseSelection="Necessary Sectors Only (for Program Load)" -programBin application_v1_signed.bin 0x20000
Implementation notes
-
R5 vector table can only be be at 0x00000000 or 0xFFFF0000
- The wolfBoot exception handling forwards these to the Application
-
ASM must be self contained. See SPNU151V - ARM Optimizing C/C++ Compiler v20.2.0.LTS January 1998–Revised February 2020
The __asm statement does not provide any way to refer to local variables. If your assembly code needs to refer to local variables, you will need to write the entire function in assembly code.