Exactly, you just need to be a bit smart about where you put your code. Typically it'll be a 90/10 scenario anyway, 10% of your code executes 90% of the time, so find that 10% and stick it in RAM.
True, but beyond some obvious functionality such as interrupt routines, some RTOS/library functions etc, not all applications have clear hotspots. Any code that you don't mind running at 26MHz or less can clearly be located in QSPI Flash; for the rest potentially a *lot* more work may be needed to analyse the application - a) to find which code definitely could not be put in Flash because of hard real time requirements - including rarely used but important error/exception handling - and b) that with 'softer' real-time deadlines which might be OK in Flash.
NXP suggest that code executing from Flash runs at approx 70% of full speed but without any supporting evidence or guidelines (that I can find) I'll take that with a pinch of salt - maybe for code with a small memory footprint relative to the unspecified cache size or that which spends a lot of time in small loops.
Profiling may help for (b) but a significant problem is the difficulty of exercising some parts of the code without extensive test support which you are unlikely to have at the start of a project (if at all!). Especially when you are at the stage of choosing which micro(s) to use.
I agree though that for a lot of applications, especially where the demands on the RAM are modest enough to allow plenty to be allocated for code, will be easy to partition. But if the product is the type that suffers 'creeping featuritis' you also have to be able to anticipate future demands - you could end up in the position of having a massively powerful processor - triple core so potentially 612MHz worth of processing (who needs an M7?!!) - with gobs of external Flash for the code, but not enough spare RAM to run it from and you're faced with your new features having to run at 26MHz - less than even an entry level Cortex M0 costing less than $1.
You can also play around increasing the speed of the SPIFI interface, it's been a few weeks but the last time I fiddles about with that, the SPIFI interface was only running at 50MHz or so by default but it'll support 104MHz, ie 52MB/s.
To be honest, in prototypes I've not yet needed to move anything specifically into RAM.! But I did do a few tests to show it can be done.
If you want to provide your code by booting from an external device, you'll want to hide your SPI or serial lines in a middle layer to hamper snooping and use a BGA source device. At some point, at least some stuff is going to be sent in the clear.
Yes I had thought of that, but the BGA Flash device could be lifted and re-connected dead bug style given that only 5 or 6 signal lines need to go to the processor, so not too difficult to intercept.
It means you lose DFU too, one of the nice features of the device.
I had a quick look at the documentation but couldn't get to grips with why this could be exciting - it appears to be a USB Bootloader/programming feature?
You may have already figured this out but nothing is easy on this processor :-(
Yeah. 1420 pages of user manual is testament to that - and I'll bet its still missing important detail! But is it really any harder than say an STM32F4 to get up and running with some basics peripherals such as ADC, timers, UARTs etc. with DMA? It's not as if the peripherals on other M4s are exactly trivial.
Don't get me wrong, I think this is an amazing micro for the price - it's just that the external Flash issues (encryption and performance) especially are major concerns. I'd love to think that NXP are going to update the LPC4370 - even if it were only to fix any silicon errata and add some on-chip bootable Flash. And a non-BGA package version would be very welcome.