5 Replies Latest reply on Jul 28, 2020 3:16 AM by Rile_3376121

    PSOC5LP Dual-application Bootloader For production


      Hi Forums,


      I have followed the https://www.cypress.com/documentation/application-notes/an73854-psoc-introduction-bootloaders


      and created a "dual-application bootloadable" project which generates 5 files as show in the next image :




      I would appreciate if somebody can help me out with next questions :


      1) How "Hello_1.cyacd" and "Hello_2.cyacd" can be flashed to the target mcu ?

          - Do they have to be merged into a single HEX first ?

          - Or maybe if I flash "Hello_1.cyacd" the image is copy twice into the mcu flash memory?

         - AN73854 explains how to generate a dual-application bootloadable project .cyacd files but

           does not explain How to get them into the target mcu.

      2) When Once "Hello_1.cyacd" and "Hello_2.cyacd" are in the mcu flash memory. I assume "Hello_1" execute by default.

           Once in the field if I want to upgrade the firmware with another update version let's say  "Hello_3.cyacd" and "Hello_4.cyacd" . How do I proceed?

           I assume I will only have to flash "Hello_3.cyacd" and this will replace "Hello_1.cyacd"?

           In the case of the new "Hello_3.cyacd" fails or its invalid the bootloader will run "Hello_2.cyacd" as a safe fallback?

      3)  How to properly test a "dual-application bootloable" project ?


      Thank you in advance

        • 1. Re: PSOC5LP Dual-application Bootloader For production



          Suppose if you are developing a dual application bootloader, let us say you have 3 projects:



          2. APPLICATION_1

          3. APPLICATION_2


          The DUAL_APP_BOOTLOADER is the application that contains bootloader component and communication component and that bootloads APPLICATION_1 and APPLICATION_2.

          The Bootloadable component of the projects APPLICATION_1 and APPLICATION_2 are referenced to bootloader component of DUAL_APP_BOOTLOADER.

          When you build the three projects you will see the following files:(path: .cydsn\CortexM0\ARM_GCC_541\Debug)



          APPLICATION_1:                               APPLICATION_1_1.hex, APPLICATION_1_1.cyacd, APPLICATION_1_2.hex, APPLICATION_1_2.cyacd

          APPLICATION_2:                               APPLICATION_2_1.hex, APPLICATION_2_1.cyacd, APPLICATION_2_2.hex, APPLICATION_2_2.cyacd


          You can do any one of the following steps to fill your flash with 3 applications:

          1. Pogram the DUAL_APP_BOOTLOADER.hex. After programming DUAL_APP_BOOTLOADER, you can bootload APPLICATION_1_1.cyacd and APPLICATION_2_2.cyacd.

          You can also bootload APPLICATION_1_2.cyacd and APPLICATION_2_1.cyacd.


          2. Program APLICATION_1_1.hex  and then bootload APPLICATION_2_2.cyacd

          Or, Program APPLICATION_1_2.hex  and then bootload APPLICATION_2_1.cyacd


          3. Program APLICATION_2_1.hex  and then bootload APPLICATION_1_2.cyacd

          Or, Program APPLICATION_2_2.hex  and then bootload APPLICATION_1_1.cyacd


          Hope the above explanations answers to your questions 1 and 2.


          >>"3)  How to properly test a "dual-application bootloable" project ?"

          --> Using Bootloader_Exit() API from the DUAL_APP_BOOTLOADER project, you can switch between APPLICATION_1 and APPLICATION_2 during boot process.



          I am attaching a project for your reference. Kindly let us know if you have any queries:



          • 2. Re: PSOC5LP Dual-application Bootloader For production

            Thank you for your feedback GaneshD_41. Much appreciated.


            In the AN73854- PSOC Introcuction to Bootloaders (https://www.cypress.com/documentation/application-notes/an73854-psoc-introduction-bootloaders) page 23 says : "For a high-reliability application, you can place two copies of the same bootloadable project into flash".


            How to accomplish this case in which the 2 apps are the same?

            How to tell the bootloader what application should start or be marked as active?

            My guess the in the bootloader code something else besides calling  "Bootloader_Start()" is needed but I could not find any examples in the case when App1 = App2 .




            In a classic dual-app bootloader 3 hex files ( Hello.exe, Hello_1.exe, Hello_2.exe ) and 2 cyacd files are generated .

            Is the Hello.exe generated for production purposes. ( In order to flash the bootloader + the 2 apps) using one single hex file?


            Thank you.

            • 3. Re: PSOC5LP Dual-application Bootloader For production

              Hi Forum,


              Can anyone please help with these questions?


              Thank you.

              • 4. Re: PSOC5LP Dual-application Bootloader For production



                If you want both Application_1 and Application_2 both as single application (say Application_1) you have to do the following steps:


                1. Program the Bootloader.hex in to your board. In the Bootloader application you have to call the Bootloader_Start().


                2. Now in bootloader host use Application_1_1.cyacd and Application_1_2.cyacd one by one and bootload those applications into flash. Please note that after bootloading Application_1_1.cyacd, you have to comeback to Bootloader project and then call the API either Bootloader_Start() or Bootloader_Exit(Bootloader_EXIT_TO_BTLDR) to bootload Application_1_2.cyacd


                3. After botloading both the .cyacd files, from the bootloader application you have to call either Bootloader_Exit(Bootloader_EXIT_TO_BTLDB_1); or Bootloader_Exit(Bootloader_EXIT_TO_BTLDB_2); to switch between Application 1 or application_2. (In your case both applications are same).


                4. From Application_1 or Application_2, you need to call Bootloadable_Load() to come back to Bootloader and start the selection process. Please check the attached project which implements the above steps.




                1 of 1 people found this helpful