Placing apps to DCT_APP0_INDEX and DCT_APP1_INDEX and using wiced_framework_set_boot() to change boot sector

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

cross mob
BiM_4640481
Level 4
Level 4
25 replies posted 25 sign-ins 10 replies posted

Hello,

I am working on Murata1LD board in WicedStudio.

I want to place apps to DCT_APP0_INDEX and DCT_APP1_INDEX. I am able to write apps to both these locations. But changing boot sector using function wiced_framework_set_boot() and rebooting always boots with app present in DCT_APP0_INDEX. Do you have any documents explaining the boot loader  flow? I am also looking for a way to identify from which partition the app is loaded.

WICED version - 6.4

OS - ThreadX

Please give some guidelines on this.

Thanks,

Binsy M S

0 Likes
1 Solution
Murali_R
Moderator
Moderator
Moderator
250 sign-ins 250 replies posted 100 solutions authored

BiM_4640481 Are you doing an OTA update from AWS? If so, i think you have some some sort of custom implementation.

Anyway, I think what you are asking is that you want to do some sort of round robin implementation where the device loads from APP0, APP1 and APP2 in a round robin way. This is not possible by default and you will need to have a custom implementation, where you will have to store a variable in the DCT/ some memory area which isn't disturbed on resets and would need to load the information about where to load the framework from there. Please get in touch with local sales/Marketing to check the feasibility of implementation.

The multi_image app is not supported on the 4343 since it doesn't have an AON ram like the 43907 as mentioned in the readme file. In my previous response, I meant that maybe that may give you an idea of how switch between boots as i didn't know the exact requirements. My bad, maybe i should have been more clearer.

Thanks

View solution in original post

0 Likes
6 Replies
Murali_R
Moderator
Moderator
Moderator
250 sign-ins 250 replies posted 100 solutions authored

BiM_4640481 Unfortunately, there's no document explaining the wiced boot process. Do you have 2 apps at APP0 and APP1 and do you want to switch between them after reset? If so, the wiced_framework_set_boot() API should be able to do the job for you. All you need to do is set the boot to the respective app. Have you taken a look at the app at /43xxx_Wi-Fi/apps/snip/multi_image_0 ? This gives an example of how to switch between apps.

Thanks for your reply.

My requirement is :

When first OTA command is received from AWS, download the OTA update from AWS and place it in DCT_APP0_INDEX and reboot.

When OTA command comes again from AWS, download the OTA update from AWS and place it in DCT_APP1_INDEX and reboot.

And this should continue.

For this I was searching for an API or variable that can give me current DCT app index in use, so that the next OTA can be placed in the other app location and use wiced_framework_set_boot() accordingly.

Can you please get me some info on this?

Meanwhile I will have a look at /43xxx_Wi-Fi/apps/snip/multi_image_0

Thanks,

Binsy M S

0 Likes
Murali_R
Moderator
Moderator
Moderator
250 sign-ins 250 replies posted 100 solutions authored

BiM_4640481 Are you doing an OTA update from AWS? If so, i think you have some some sort of custom implementation.

Anyway, I think what you are asking is that you want to do some sort of round robin implementation where the device loads from APP0, APP1 and APP2 in a round robin way. This is not possible by default and you will need to have a custom implementation, where you will have to store a variable in the DCT/ some memory area which isn't disturbed on resets and would need to load the information about where to load the framework from there. Please get in touch with local sales/Marketing to check the feasibility of implementation.

The multi_image app is not supported on the 4343 since it doesn't have an AON ram like the 43907 as mentioned in the readme file. In my previous response, I meant that maybe that may give you an idea of how switch between boots as i didn't know the exact requirements. My bad, maybe i should have been more clearer.

Thanks

0 Likes

Thanks a lot for the reply.

Yes . You are right. I am doing an OTA update from AWS. Your understanding of our requirement is right.

As you suggested, will try to check the feasibility of implementation.

Came across a structure named "boot_detail_t.  Is there any variable in this structure that gets updated based on DCT_APP0_INDEX, DCT_APP1_INDEX or DCT_APP2_INDEX that is passed to wiced_framework_set_boot() function?

Thanks once again.

0 Likes
Murali_R
Moderator
Moderator
Moderator
250 sign-ins 250 replies posted 100 solutions authored

BiM_4640481 DCT_APP0_INDEX, DCT_APP1_INDEX or DCT_APP2_INDEX, affects the boot_detail_t structure by modifying the image location from where the code gets loaded. In the file /43xxx_Wi-Fi/WICED/platform/MCU/wiced_waf_common.c, in the api wiced_waf_app_set_boot(), the below line is written.

wiced_dct_get_app_header_location( app_id, &boot.load_details.source )

This ultimately gets the location of the app id and loads it onto the boot.load_details.source which is part of the boot_detail_t structure.

A simple way to debug and confirm will be to start from the wiced_framework_set_boot() in the wiced_ota_server.c file, open the declaration and continue till you get to the root.

Hello Murali,

I referred the application suggested by you : /apps/snip/multi_image_0

When I build this application I get the following error:

build/snip.multi_image_1-MurataType1LD/libraries/App_Multi_Image_1.a(app_1.o): In function `app_console_command':

C:\Users\USER\Documents\WICED-Studio-6.4\43xxx_Wi-Fi/apps/snip/multi_image_1/app_1.c:612: undefined reference to `platform_deepsleep_set_boot'

build/snip.multi_image_1-MurataType1LD/libraries/App_Multi_Image_1.a(app_1.o): In function `deep_sleep':

C:\Users\USER\Documents\WICED-Studio-6.4\43xxx_Wi-Fi/apps/snip/multi_image_1/app_1.c:360: undefined reference to `wiced_deep_sleep_is_networking_idle'

collect2.exe: error: ld returned 1 exit status

make.exe[1]: *** [build/snip.multi_image_1-MurataType1LD/binary/snip.multi_image_1-MurataType1LD.elf] Error 1

tools/makefiles/wiced_elf.mk:315: recipe for target 'build/snip.multi_image_1-MurataType1LD/binary/snip.multi_image_1-MurataType1LD.elf' failed

make: *** [main_app] Error 2

Makefile:351: recipe for target 'main_app' failed

I am working on Murata1LD board with  BCM43438 Wi-Fi. The readme file of /apps/snip/multi_image_0 talks about BCM94390x platform as requirement. Can I use this application on Murata1LD board?

0 Likes