The TF-M core throws an exception when adding an e-ink display to the device tree

I'm planning on using an e-ink display with my custom PCB. But when I add/enable the e-ink display node in my device tree, the TF-M code throws an exception in /ncs/v3.2.1/modules/tee/tf-m/trusted-firmware-m/secure_fw/spm/core/main.c on line 31:






I'm using the /ns target.

The software repo: https://github.com/KOEGlike/eno-os/

Parents Reply
  • Here is my new code

    And here are the logs(I used RTT for this):

    00> [00:00:00.252,288] <dbg> os: setup_thread_stack: stack 0x20010400 for thread 0x2000d868: obj_size=4096 buf_start=0x20010400  buf_size 4096 stack_ptr=0x20011400
    00> [00:00:00.252,319] <dbg> os: setup_thread_stack: stack 0x200102c0 for thread 0x2000d7b0: obj_size=320 buf_start=0x200102c0  buf_size 320 stack_ptr=0x20010400
    00> [00:00:00.252,380] <dbg> clock_control: clkstarted_handle: lfclk: Clock started
    00> [00:00:00.252,410] <dbg> os: setup_thread_stack: stack 0x2000f7c0 for thread 0x20008698: obj_size=768 buf_start=0x2000f7c0  buf_size 768 stack_ptr=0x2000fac0
    00> [00:00:00.252,502] <dbg> ssd16xx: ssd16xx_init: 
    00> [00:00:00.252,532] <dbg> ssd16xx: ssd16xx_controller_init: 
    00> [00:00:00.252,563] <dbg> os: z_tick_sleep: thread 0x2000d868 for 33 ticks
    00> [00:00:00.253,692] <dbg> os: z_tick_sleep: thread 0x2000d868 for 33 ticks
    00> [00:00:00.254,821] <dbg> os: z_tick_sleep: thread 0x2000d868 for 33 ticks
    00> [00:00:00.255,950] <dbg> os: z_impl_k_mutex_0m

Children
  • I lowered the log level, added uart for logging to run on a DK, and this is the output:

    --- 33 messages dropped ---
    [00:00:00.315,673] <dbg> lvgl: lvgl_log: (0.315, +0)	 event_send_core: Sending event 27 to 0x20009cec with 0x20012064 param lv_obj_event.c:353
    
    [00:00:00.315,826] <inf> lvgl: (0.315, +0)	 lv_obj_create: begin lv_obj.c:215
    
    [00:00:00.316,009] <dbg> lvgl: lvgl_log: (0.315, +0)	 lv_obj_class_create_obj: Creating object with 0x4863c class on 0 parent lv_obj_class.c:49
    
    [00:00:00.316,131] <dbg> lvgl: lvgl_log: (0.316, +1)	 lv_malloc_zeroed: allocating 44 bytes lv_mem.c:94
    
    [00:00:00.316,284] <dbg> lvgl: lvgl_log: (0.316, +0)	 lv_malloc_zeroed: allocated at 0x20009d2c lv_mem.c:115
    
    [00:00:00.316,406] <dbg> lvgl: lvgl_log: (0.316, +0)	 lv_obj_class_create_obj: creating a screen lv_obj_class.c:58
    
    [00:00:00.316,558] <dbg> lvgl: lvgl_log: (0.316, +0)	 lv_realloc: reallocating 0x20009d1c with 12 size lv_mem.c:150
    
    [00:00:00.316,711] <dbg> lvgl: lvgl_log: (0.316, +0)	 lv_realloc: reallocated at 0x20009d1c lv_mem.c:166
    
    [00:00:00.316,833] <dbg> lvgl: lvgl_log: (0.316, +0)	 lv_obj_constructor: begin lv_obj.c:481
    
    [00:00:00.316,955] <dbg> lvgl: lvgl_log: (0.316, +0)	 lv_obj_constructor: finished lv_obj.c:510
    
    [00:00:00.317,169] <dbg> lvgl: lvgl_log: (0.316, +0)	 event_send_core: Sending event 50 to 0x20009d2c with 0 param lv_obj_event.c:353
    
    [00:00:00.317,382] <dbg> lvgl: lvgl_log: (0.317, +1)	 event_send_core: Sending event 27 to 0x20009d2c with 0x20012064 param lv_obj_event.c:353
    
    [00:00:00.317,565] <inf> lvgl: (0.317, +0)	 lv_obj_create: begin lv_obj.c:215
    
    [00:00:00.317,749] <dbg> lvgl: lvgl_log: (0.317, +0)	 lv_obj_class_create_obj: Creating object with 0x4863c class on 0 parent lv_obj_class.c:49
    
    [00:00:00.317,871] <dbg> lvgl: lvgl_log: (0.317, +0)	 lv_malloc_zeroed: allocating 44 bytes lv_mem.c:94
    
    [00:00:00.318,023] <dbg> lvgl: lvgl_log: (0.317, +0)	 lv_malloc_zeroed: allocated at 0x20009d5c lv_mem.c:115
    
    [00:00:00.318,176] <dbg> lvgl: lvgl_log: (0.318, +1)	 lv_obj_class_create_obj: creating a screen lv_obj_class.c:58
    
    [00:00:00.318,328] <dbg> lvgl: lvgl_log: (0.318, +0)	 lv_realloc: reallocating 0x20009d1c with 16 size lv_mem.c:150
    
    [00:00:00.318,481] <dbg> lvgl: lvgl_log: (0.318, +0)	 lv_realloc: reallocated at 0x20009d8c lv_mem.c:166
    
    [00:00:00.318,634] <dbg> lvgl: lvgl_log: (0.318, +0)	 lv_obj_constructor: begin lv_obj.c:481
    
    [00:00:00.318,756] <dbg> lvgl: lvgl_log: (0.318, +0)	 lv_obj_constructor: finished lv_obj.c:510
    
    [00:00:00.318,939] <dbg> lvgl: lvgl_log: (0.318, +0)	 event_send_core: Sending event 50 to 0x20009d5c with 0 param lv_obj_event.c:353
    
    [00:00:00.319,183] <dbg> lvgl: lvgl_log: (0.319, +1)	 event_send_core: Sending event 27 to 0x20009d5c with 0x20012064 param lv_obj_event.c:353
    
    [00:00:00.319,366] <dbg> lvgl: lvgl_log: (0.319, +0)	 lv_malloc_zeroed: allocating 52 bytes lv_mem.c:94
    
    [00:00:00.319,519] <dbg> lvgl: lvgl_log: (0.319, +0)	 lv_malloc_zeroed: allocated at 0x20009da4 lv_mem.c:115
    
    [00:00:00.319,702] <dbg> lvgl: lvgl_log: (0.319, +0)	 lv_malloc_zeroed: allocating 52 bytes lv_mem.c:94
    
    [00:00:00.319,854] <dbg> lvgl: lvgl_log: (0.319, +0)	 lv_malloc_zeroed: allocated at 0x20009ddc lv_mem.c:115
    
    [00:00:00.320,007] <dbg> lvgl: lvgl_log: (0.319, +0)	 lv_malloc_zeroed: allocating 52 bytes lv_mem.c:94
    
    [00:00:00.320,159] <dbg> lvgl: lvgl_log: (0.320, +1)	 lv_malloc_zeroed: allocated at 0x20009e14 lv_mem.c:115
    
    [00:00:00.320,343] <dbg> lvgl: lvgl_log: (0.320, +0)	 lv_malloc: allocating 12 bytes lv_mem.c:64
    
    [00:00:00.320,495] <dbg> lvgl: lvgl_log: (0.320, +0)	 lv_malloc: allocated at 0x20009d1c lv_mem.c:88
    
    [00:00:00.320,617] <dbg> lvgl: lvgl_log: (0.320, +0)	 lv_malloc: allocating 4 bytes lv_mem.c:64
    
    [00:00:00.320,770] <dbg> lvgl: lvgl_log: (0.320, +0)	 lv_malloc: allocated at 0x20009ce4 lv_mem.c:88
    
    [00:00:00.320,922] <dbg> lvgl: lvgl_log: (0.320, +0)	 lv_malloc: allocating 12 bytes lv_mem.c:64
    
    [00:00:00.321,044] <dbg> lvgl: lvgl_log: (0.320, +0)	 lv_malloc: allocated at 0x20009e4c lv_mem.c:88
    
    [00:00:00.321,228] <dbg> lvgl: lvgl_log: (0.321, +1)	 lv_realloc: reallocating 0x20009ce4 with 20 size lv_mem.c:150
    
    [00:00:00.321,380] <dbg> lvgl: lvgl_log: (0.321, +0)	 lv_realloc: reallocated at 0x20009e5c lv_mem.c:166
    
    APP: main() entered
    [00:00:00.321,441] <dbg> MAIN: main: Booted up
    [00:00:00.321,472] <err> MAIN: Error: led device is not ready
    
    uart:~$ 
    

     

    Obviously, I do not have the same setup as you, wrt. display/sensors etc, but this shows that it boots as expected. RTT can have a habit of not printing the full log when faulting, so I wanted to run without that.

    Here's my diff:

    diff --git a/boards/Gensis/meko_v2/meko_v2-pinctrl.dtsi b/boards/Gensis/meko_v2/meko_v2-pinctrl.dtsi
    index 9cac073..015467d 100644
    --- a/boards/Gensis/meko_v2/meko_v2-pinctrl.dtsi
    +++ b/boards/Gensis/meko_v2/meko_v2-pinctrl.dtsi
    @@ -30,4 +30,26 @@
                 low-power-enable;
             };
         };
    +	uart0_default: uart0_default {
    +		group1 {
    +			psels = <NRF_PSEL(UART_TX, 0, 20)>,
    +				<NRF_PSEL(UART_RTS, 0, 19)>;
    +		};
    +
    +		group2 {
    +			psels = <NRF_PSEL(UART_RX, 0, 22)>,
    +				<NRF_PSEL(UART_CTS, 0, 21)>;
    +			bias-pull-up;
    +		};
    +	};
    +
    +	uart0_sleep: uart0_sleep {
    +		group1 {
    +			psels = <NRF_PSEL(UART_TX, 0, 20)>,
    +				<NRF_PSEL(UART_RX, 0, 22)>,
    +				<NRF_PSEL(UART_RTS, 0, 19)>,
    +				<NRF_PSEL(UART_CTS, 0, 21)>;
    +			low-power-enable;
    +		};
    +	};
     };
    diff --git a/boards/Gensis/meko_v2/meko_v2_common.dtsi b/boards/Gensis/meko_v2/meko_v2_common.dtsi
    index 198dc53..ade056b 100644
    --- a/boards/Gensis/meko_v2/meko_v2_common.dtsi
    +++ b/boards/Gensis/meko_v2/meko_v2_common.dtsi
    @@ -5,6 +5,8 @@
     
         chosen {
             zephyr,display=&epd;
    +		zephyr,console = &uart0;
    +		zephyr,shell-uart = &uart0;
         };
     
         motor: zephyr,user {
    @@ -76,6 +78,15 @@
         };
     };
     
    +&uart0 {
    +	status = "okay";
    +	current-speed = <115200>;
    +	pinctrl-0 = <&uart0_default>;
    +	pinctrl-1 = <&uart0_sleep>;
    +	pinctrl-names = "default", "sleep";
    +};
    +
    +
     &gpio0 {
         status = "okay";
     };
    @@ -155,4 +166,4 @@
                 };
             };
         };
    -};
    \ No newline at end of file
    +};
    diff --git a/prj.conf b/prj.conf
    index 0506dca..3fff391 100644
    --- a/prj.conf
    +++ b/prj.conf
    @@ -7,15 +7,15 @@ CONFIG_DEBUG_THREAD_INFO=y
     CONFIG_CONSOLE=y
     CONFIG_LOG=y
     CONFIG_LOG_CMDS=y
    -CONFIG_LOG_DEFAULT_LEVEL=4
    +# CONFIG_LOG_DEFAULT_LEVEL=4
     CONFIG_LOG_BUFFER_SIZE=4096
     
    -CONFIG_USE_SEGGER_RTT=y
    -CONFIG_LOG_BACKEND_RTT=y
    -CONFIG_RTT_CONSOLE=y
    -
    +# CONFIG_USE_SEGGER_RTT=y
    +# CONFIG_LOG_BACKEND_RTT=y
    +# CONFIG_RTT_CONSOLE=y
    +CONFIG_SERIAL=y
    +CONFIG_UART_CONSOLE=y
     CONFIG_TFM_SECURE_UART=n
    -CONFIG_UART_CONSOLE=n
     CONFIG_TFM_LOG_LEVEL_SILENCE=y
     
     CONFIG_REGULATOR_LOG_LEVEL_DBG=y
    @@ -51,4 +51,4 @@ CONFIG_LV_FONT_MONTSERRAT_12=y
     CONFIG_LV_FONT_MONTSERRAT_14=y
     CONFIG_LV_FONT_MONTSERRAT_16=y
     CONFIG_LV_FONT_MONTSERRAT_18=y
    -CONFIG_LV_FONT_MONTSERRAT_24=y
    \ No newline at end of file
    +CONFIG_LV_FONT_MONTSERRAT_24=y
    

     

    Could you check if you still see a fault condition?

     

    Kind regards,

    Håkon

Related