Difference between revisions of "Microcontrollers-nxp"

From Wiki at Neela Nurseries
Jump to: navigation, search
(starting a page on NXP microcontroller offerings.)
 
m (typo fix)
(27 intermediate revisions by the same user not shown)
Line 1: Line 1:
 +
parent topic [[Microcontrollers|Microcontrollers]]
 +
 +
 +
__TOC__
 +
 +
 +
== [[#top|^]] Overview ==
 +
 +
This local page to hold notes related to NXP semiconductor company, headquartered in Eindhoven, Netherlands.
 +
 +
<!-- comentario -->
 +
 +
== [[#top|^]] MCUs ==
 +
 +
Starting point for datasheet and user manual links to specific NXP MCU families:
 +
<ul>
 +
* https://www.nxp.com/docs/en/data-sheet/LPC11U6X.pdf
 +
* https://www.nxp.com/docs/en/nxp/data-sheets/LPC55S6x_DS.pdf  LPC55S69 datasheet.  See page 47 of 133 for course configuration register map.
 +
</ul>
 +
 +
An important security concern of the LPC55S69 is detailed here in an Oxide dot computer article:
 +
<ul>
 +
*  https://oxide.computer/blog/exploiting-undocumented-hardware-blocks-in-the-lpc55s69
 +
</ul>
 +
 +
<!-- comentario -->
 +
 +
== [[#top|^]] Development Kits ==
 +
 +
Development kit for the LPC55S69 MCU intro page at https://www.nxp.com/document/guide/getting-started-with-the-lpc55s69-evk-evaluation-board:GS-LPC55S69-EVK.  From here a couple of useful further documents or chapters to this effective users' manual are . . . reached by clicking once on left pane navigation links, which load content into a right hand pane of the above linked manual.  In the page on multi-core examples and use there are external links to some important application notes including:
 +
 +
*  https://www.nxp.com/docs/en/application-note/AN12282.pdf  LPC55S69 multi-core DSP capabilities
 +
*  https://www.nxp.com/docs/en/application-note/AN12335.pdf  LPC55xx/LPC55Sxx Dual Core Communication
 +
*  https://www.nxp.com/docs/en/application-note/AN12358.pdf  LPC55xx/LPC55Sxx Dual-Core Debug in MCUXpresso
 +
*  https://community.nxp.com/t5/Blogs/LPC55xx-Multicore-Applications-with-MCUXpresso-IDE/ba-p/1130891  LPC55xx Multicore Applications with MCUXpresso IDE
 +
A link to download multi-core document:
 +
*  https://community.nxp.com/pwmxy87654/attachments/pwmxy87654/blog/379/1/LPC55xx_Multicore_v1.00.pdf
 +
 +
Schematic files for LPC55S69-EVK at this link, but requires NXP user account and login:
 +
 +
*  https://www.nxp.com/design/development-boards/lpcxpresso-boards/lpcxpresso55s69-development-board:LPC55S69-EVK
 +
 +
 +
<!-- comentario -->
 +
 +
== [[#top|^]] Technologies and Features ==
 +
2022
 +
<ul>
 +
0721
 +
*  http://www.nxp.com/docs/en/application-note/AN2708.pdf  intro to External Bus Interface EBI
 +
 +
*  https://www.nxp.com/docs/en/user-guide/DSP56F827EVMUM.pdf  DSP56F827 evaluation board
 +
</ul>
 +
 +
2022
 +
<ul>
 +
0721
 +
*  https://www.digikey.com/en/products/detail/nxp-usa-inc/LPC3250FET296-01K/13540936  MCU LPC3250FET296
 +
</ul>
 +
 +
<!-- comentario -->
 +
 +
== [[#top|^]] NXP Bootloading ==
 +
 +
NXP's document on their built-in ROM based bootloader:
 +
 +
*  https://www.nxp.com/docs/en/reference-manual/MCUBOOTRM.pdf
 +
 +
 +
Some NXP community forum posts:
 +
 +
*  https://community.nxp.com/t5/MCU-Bootloader/Entry-and-Exit-of-ROM-Bootloader-MKE18F-MCUXpresso/m-p/905906
 +
 +
*  https://community.nxp.com/t5/NXP-Designs/Bootloader-and-ISP-for-LPC55S69/m-p/1061246
 +
 +
How to enter NXP ROM bootloader from firmware:
 +
*  https://community.nxp.com/t5/LPC-Microcontrollers/How-can-I-boot-to-LPC55-to-BOOT-ROM-from-firmware-code-Previous/td-p/1078635
 +
<ul>
 +
Solution on github, written in rust language?  Need to confirm this . . .
 +
*  https://github.com/lpc55/lpc55-hal/pull/51/files
 +
*  https://github.com/lpc55/lpc55-hal
 +
</ul>
 +
 +
Known ROM bootloader issue of NXP with no plans for fix:
 +
*  https://community.nxp.com/t5/LPC-Microcontrollers/LPC55S69-ROM-bootloader-hangs-if-Flash-operations-are/m-p/1212531
 +
 +
<!-- comentario -->
 +
 +
== [[#top|^]] To Sort ==
  
 
Microcontrollers de NXP, starting with a NXP's Line Card:
 
Microcontrollers de NXP, starting with a NXP's Line Card:
Line 5: Line 94:
  
 
*  http://www.nxp.com/docs/en/product-selector-guide/LPCMICROLNCD.pdf
 
*  http://www.nxp.com/docs/en/product-selector-guide/LPCMICROLNCD.pdf
 +
 +
And an article at Wikipedia:
 +
 +
*  https://en.wikipedia.org/wiki/NXP_LPC
 +
 +
*  https://www.nxp.com/docs/en/user-guide/UM10946-om13084_88.pdf
 +
 +
 +
How to program dual-core microcontrollers:
 +
*  https://community.arm.com/developer/ip-products/processors/f/cortex-a-forum/4105/how-to-build-an-application-for-dual-core-m4-m0-mcu/18010
 +
 +
 +
 +
 +
Not sure how useful this code example will be, it is posted in or around 2014.  Hard to read on the NXP forum due to some funky formatting:
 +
<pre>
 +
;/* File: example.s */
 +
 +
        .syntax unified            /* this makes the assembler automatically generate IT instructions for you */
 +
 +
        .cpu    cortex-m0          /* this selects the cortex-m0 architecture and helps you avoid using cortex-m3/cortex-m4 instructions */
 +
 +
        .text                      /* this makes sure the code goes into the .text section */
 +
 +
        .global m0vectors
 +
 +
        .word  0x20004000          /* this defines the initial stack pointer for the Cortex-M0 */
 +
 +
        .word  m0reset            /* the reset exception vector */
 +
 +
/* here you should place your other exception vectors. There are too many to include in this example */
 +
 +
        .global m0test              /* this exports the symbol m0test, so you can reference it from for instance C */
 +
 +
        .func  m0test,m0test      /* this names the symbol m0test as a function (for the debug-info) */
 +
 +
        .type  m0test,%function    /* this tells the assembler (and linker) what kind of symbol we're generating */
 +
 +
        .thumb_func                /* this is necessary if pointers use the symbol */
 +
 +
        .align                      /* this makes sure the code is positioned on a 16-bit boundary */
 +
 +
m0test:                            /* this defines the actual symbol */
 +
 +
        ldr    r0,=0x01234567      /* example code, load a value into r0 */
 +
 +
        bx      lr                  /* return to the calling function */
 +
 +
m0reset:
 +
 +
        bl      m0test              /* this is the startup-code, call our function */
 +
 +
lockup: wfi                        /* sleep the CPU; it'll wake up if an interrupt occurs */
 +
 +
        b      lockup              /* go back to sleep */
 +
 +
        .size  m0test, . - m0test  /* this tells the linker how big this function is, so it can correctly exclude it if it's unused */
 +
 +
        .endfunc                    /* this marks the end of the function (for the debug-info) */
 +
 +
You can then refer to the code from your C file...
 +
 +
/* File: main.c */
 +
 +
#include <ipc_queue.h>
 +
 +
/* Note: you don't need argc and argv on a microcontroller. */
 +
 +
int main(int argc, const char *argv[])
 +
 +
{
 +
 +
    IPC_haltSlave();
 +
 +
    SET_SLAVE_SHADOWREG(m0vectors);
 +
 +
    IPC_startSlave();
 +
 +
    while(1)
 +
 +
    {
 +
 +
          asm volatile("wfi");
 +
 +
    }
 +
 +
    return(0);
 +
 +
}
 +
</pre>
 +
 +
 +
<!-- comentario -->
 +
 +
== [[#top|^]] References ==
 +
 +
*  https://media.defcon.org/DEF%20CON%2029/DEF%20CON%2029%20presentations/Laura%20Abbott%20Rick%20Altherr%20-%20Breaking%20TrustZone-M%20-%20%20Privilege%20Escalation%20on%20LPC55S69.pdf
 +
 +
<!-- comentario -->
 +
 +
 +
__TOC__
  
  

Revision as of 20:02, 1 February 2023

parent topic Microcontrollers



^ Overview

This local page to hold notes related to NXP semiconductor company, headquartered in Eindhoven, Netherlands.


^ MCUs

Starting point for datasheet and user manual links to specific NXP MCU families:

An important security concern of the LPC55S69 is detailed here in an Oxide dot computer article:


^ Development Kits

Development kit for the LPC55S69 MCU intro page at https://www.nxp.com/document/guide/getting-started-with-the-lpc55s69-evk-evaluation-board:GS-LPC55S69-EVK. From here a couple of useful further documents or chapters to this effective users' manual are . . . reached by clicking once on left pane navigation links, which load content into a right hand pane of the above linked manual. In the page on multi-core examples and use there are external links to some important application notes including:

A link to download multi-core document:

Schematic files for LPC55S69-EVK at this link, but requires NXP user account and login:


^ Technologies and Features

2022

2022


^ NXP Bootloading

NXP's document on their built-in ROM based bootloader:


Some NXP community forum posts:

How to enter NXP ROM bootloader from firmware:

Known ROM bootloader issue of NXP with no plans for fix:


^ To Sort

Microcontrollers de NXP, starting with a NXP's Line Card:

2021-07-08

And an article at Wikipedia:


How to program dual-core microcontrollers:



Not sure how useful this code example will be, it is posted in or around 2014. Hard to read on the NXP forum due to some funky formatting:

;/* File: example.s */

        .syntax unified             /* this makes the assembler automatically generate IT instructions for you */

        .cpu    cortex-m0           /* this selects the cortex-m0 architecture and helps you avoid using cortex-m3/cortex-m4 instructions */

        .text                       /* this makes sure the code goes into the .text section */

        .global m0vectors

        .word   0x20004000          /* this defines the initial stack pointer for the Cortex-M0 */

        .word   m0reset             /* the reset exception vector */

/* here you should place your other exception vectors. There are too many to include in this example */

        .global m0test              /* this exports the symbol m0test, so you can reference it from for instance C */

        .func   m0test,m0test       /* this names the symbol m0test as a function (for the debug-info) */

        .type   m0test,%function    /* this tells the assembler (and linker) what kind of symbol we're generating */

        .thumb_func                 /* this is necessary if pointers use the symbol */

        .align                      /* this makes sure the code is positioned on a 16-bit boundary */

m0test:                             /* this defines the actual symbol */

        ldr     r0,=0x01234567      /* example code, load a value into r0 */

        bx      lr                  /* return to the calling function */

m0reset:

        bl      m0test              /* this is the startup-code, call our function */

lockup: wfi                         /* sleep the CPU; it'll wake up if an interrupt occurs */

         b       lockup              /* go back to sleep */

        .size   m0test, . - m0test  /* this tells the linker how big this function is, so it can correctly exclude it if it's unused */

        .endfunc                    /* this marks the end of the function (for the debug-info) */

You can then refer to the code from your C file...

/* File: main.c */

#include <ipc_queue.h>

/* Note: you don't need argc and argv on a microcontroller. */

int main(int argc, const char *argv[])

{

     IPC_haltSlave();

     SET_SLAVE_SHADOWREG(m0vectors);

     IPC_startSlave();

     while(1)

     {

          asm volatile("wfi");

     }

     return(0);

}


^ References




- - - top - - -