Difference between revisions of "Microcontrollers-nxp"
(starting a page on NXP microcontroller offerings.) |
m (→^ MCUs: - minor formatting) |
||
(29 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> | ||
+ | |||
+ | A related article from 0xide company (Oxide company spelled for searchability) regarding LPC55S69 undocumented features: | ||
+ | <ul> | ||
+ | * https://www.youtube.com/watch?v=eKKgaGbcq4o | ||
+ | </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 99: | ||
* 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__ | ||
Latest revision as of 19:57, 15 February 2023
parent topic Microcontrollers
Contents
^ 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:
- 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.
An important security concern of the LPC55S69 is detailed here in an Oxide dot computer article:
A related article from 0xide company (Oxide company spelled for searchability) regarding LPC55S69 undocumented features:
^ 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:
Schematic files for LPC55S69-EVK at this link, but requires NXP user account and login:
^ Technologies and Features
2022
-
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
2022
-
0721
^ 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:
-
Solution on github, written in rust language? Need to confirm this . . .
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