Download to image to RAM and executing it without 0xA0 USB Vendor Request

Tip / Sign in to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
geatc_3736111
Level 1
Level 1

Hello,

I am working on a custom board based on FX3 that has no EEPROM or hardcoded bootloader to acommodate 0xA0 vendor requests without implementation. So I implemented my own vendor request that transfers from a computer to RAM the image of a firmware, Since I want to execute it as well I thought that modifying the reset interrupt and then causing a warm reset would do the trick. However I am unable to figure out how can I know the entry point of a firmware I am uploading at runtime and if it is possible to do it without having to request for it as parameter. How does the hardcoded bootloader know what the entry point of an image soon to be uploaded to RAM is ?

Any help would be really appreciated.

Thank you in advance

Georgios

0 Likes
1 Solution
SrinathS_16
Moderator
Moderator
Moderator
1000 replies posted 750 replies posted 500 replies posted

Hello Georgios,

- FX3 has got an internal hard-coded boot-loader which supports A0 vendor command to load the firmware into the RAM. Please let know the reason why this cannot be used in your application to download the firmware to RAM.

- Anyway, custom vendor commands can be used to load the firmware image file into the FX3 RAM. To implement this, the code handling the vendor command must be designed to check the integrity of the firmware file that is being downloaded into the RAM. As a reference implementation, you can refer to the Fx3BootAppGcc example firmware that comes with the FX3 SDK.

- The FX3 IMG file format is mentioned in the below app note. Refer to sections 5.3 and 5.4

http://www.cypress.com/file/201991/download

The firmware entry point is specified by a 4-byte address after the termination of the image and before the checksum. This address can be passed as a parameter to the CyFx3BootJumpToProgramEntry() API to switch the control to the entry point of the newly loaded firmware.

Best regards,

Srinath S

View solution in original post

0 Likes
1 Reply
SrinathS_16
Moderator
Moderator
Moderator
1000 replies posted 750 replies posted 500 replies posted

Hello Georgios,

- FX3 has got an internal hard-coded boot-loader which supports A0 vendor command to load the firmware into the RAM. Please let know the reason why this cannot be used in your application to download the firmware to RAM.

- Anyway, custom vendor commands can be used to load the firmware image file into the FX3 RAM. To implement this, the code handling the vendor command must be designed to check the integrity of the firmware file that is being downloaded into the RAM. As a reference implementation, you can refer to the Fx3BootAppGcc example firmware that comes with the FX3 SDK.

- The FX3 IMG file format is mentioned in the below app note. Refer to sections 5.3 and 5.4

http://www.cypress.com/file/201991/download

The firmware entry point is specified by a 4-byte address after the termination of the image and before the checksum. This address can be passed as a parameter to the CyFx3BootJumpToProgramEntry() API to switch the control to the entry point of the newly loaded firmware.

Best regards,

Srinath S

0 Likes