STM32 family grows to microprocessor/Linux level with STM32MP1
st.com
st.com
If you dig around, you see it's a Vivante GPU: https://www.st.com/resource/en/programming_manual/pm0263-stm...
If nothing else the vendor-specific crappy toolchains do support the vendor’s HW well, so that’s something they need to do so that devs don’t have to start their projects with implementing the low-level support by themself.
Default free tools are great for students, hobbyists or selling low volume widgets without warranty to other hobbyists, but if your livelihood depends on it, you pay for IAR, Keil or Lauterbach tools, no questions asked.
The stability, technical support and timely bug fixes, compiler documentation (especially along the undefined edge-cases of the C language), testing, debug and trace capabilities, are worth their weight in gold.
I would use VScode for everything if I could. But for the life of me, I can't get debugging working in VS Code, using the IAR plugins and a j-Trace/j-Link. Works fine with ST-Link though, go figure.
Have you reached out to IAR regarding these issues. Normally they reply and give you workarounds or fixes if the issue is reproducible.
My nomination for worst code generator would be MPLab Harmony. I was unfortunate enough to be one of the first victims of the PIC32MZ line, which didn’t have a middleware library, or non-harmony code examples. It was autogenerated code, or read the data sheet and figure out every peripheral yourself. The code generator was so broken even the most basic modifications to get example code running on a custom board would result in non-compilable code. The experience was so frustrating I just respun the board with a different micro.
I’ll never touch any MCU that uses MPLabX again. Bonus points to Microchip for destroying atmel studio in favour of MPLab, now I have yet another family of microcontrollers I will not touch.
One thing I can say about STCube is the code it generates works, and you can always use it as a jumping off point for tweaking the generators code for your exact use case.
One genuine complaint is that the catch all interrupt handling is often too slow actually use, so you end up overwriting the default handlers, or becoming very proficient with DMA.
Another very important thing is to never intertwine your code with the autogenerated code. Keep the application code and the hardware code seperate, and have an actual “HAL” layer in your code. It’s an easy way to prevent your code from getting nuked when you reconfigure, and if you’re not happy with the autogenerated code just sub in your own functions. Best of both worlds.
I would like to cast a vote for IAR Embedded Workbench being worse.
Cube is still useful for clock trees, pinout visualizations etc.
https://www.nuvoton.com/products/microprocessors/arm9-mpus/n...
https://octavosystems.com/octavo_products/osd32mp15x/
I've been using their AM335X SIP for a while now and it's really nice. I'm starting to get away from the SOM mindset and making my designs smaller.
I've been shipping non-IoT embedded Linux products for over a decade and, honestly, I don't give a shit about what version of Linux it's running as long as the necessary drivers are compatible and working well. USB, ext4, SD/MMC, SPI, I2C, PWM, GPIO, backlight, framebuffer video...all pretty mature now.
Agonizing about being mainline is a distraction from getting things done, IMO. ARM Linux will never be fully up to bleeding edge.
Sometimes this hinders you and your customers from getting things done. Mainly because vendor kernels are, generally, really bad. Second to none other than their userspace drivers, and I want my users to be generally running a well-supported, solid software instead of whatever ${VENDOR} ships.
> USB, ext4, SD/MMC, SPI, I2C, PWM, GPIO, backlight, framebuffer video...all pretty mature now.
That's pretty basic stuff, but SPI/I2C drivers for example have issues /all the time/. It's just nice to get the fixes from mainline and integrate easier.
Other than that, custom SoCs are much more complex than the bread and butter you mentioned: NPUs, VPUs, signal processing chips etc are all a gigantic pain in vendor kernels, simply because the code is garbage.
What’s Industry 4.0? Also what’s 1, 2 and 3.0, actually…
"The term was coined by Henning Kagermann, Wolf-Dieter Lukas and Wolfgang Wahlster and first made public in 2011 at the Hanover Fair."
It's a totally arbitrary distinction.
2.0: Since 1870s and on, cheap steel via Bessemer process, electricity, large-scale chemical synthesis; unified parts, mass production.
3.0: Since, say, 1940-50s, advanced control systems, electronics, early computers, pervasive plastics, power semiconductors, advanced alloys and advanced welding, simple CNCs.
4.0: Since, say, 2000s, highly integrated electronics, pervasive computers / MCUs, highly programmable and precise CNC machines, everything through CAD software; carbon fiber, advanced glues, 3D printing.
https://sustainability-success.com/industry-1-0-to-4-0-2-3-r...
It sounds like maybe the flash/RAM is offboard? Q/OctoSPI or something else?
Although since I recently discovered [1] that the R-Pi has an exposed memory interface bus (Secondary Memory Interface, SMI) on its GPIO, I’m far more inclined to use them instead. Getting low-latency/high bandwidth I/O into these “A” (rather than “M”) processors has always been the thing that made using an I.mxRT, STM MP1 or Zynq attractive to me. Turns out the lowly Pi has had that capability all along…
Coupling a Pi via SMI with a low-end (read: cheap) FPGA (Ice40K, or Efinix, hell go to town and get an Efinix T20 with 195 io for $8) makes a potent device, IMHO.
You can still get an rpi zero W for $15 [2], and even the quad-core zero 2W if you shop around is ~22€ [3], which blows the STM away in terms of CPU, video out, ease of development etc.
[0] https://www.myirtech.com/list.asp?id=726
[1] https://www.eevblog.com/forum/projects/state-of-raspberry-pi...
Sure that's nice, but hobbyist use doesn't move the needle for ST Microelectronics even a tiny bit.
It also benefits from established support in the whole ecosystem.
In most of the target applications of these chips, you'll typically have a couple of real-time tasks. This will run on a dedicated core, or in kernel space, or with Xenomai. The rest will be firmware update services, telemetry, and maybe Bluetooth or a web GUI. Stuff where the execution speed doesn't really matter, as long as it's "fast enough". Armv7 is more than sufficient for that kind of thing.
The STM32MP2 family will probably replace the MP1 once it's in full production, but that doesn't mean the MP1 is a bad chip to use in new designs today.
The chip's competition is NXP's i.MX line of parts. If I got a good price from ST on it (and a production guarantee), I'd consider using it in a number of new products, even though the main CPUs are 32-bit Armv7 cores.
Most the USP of these is that they have an M-core which is usually where such tasks would live.
In automation it's not unusual to find controllers where the entire system lives on an MCU, and you quickly find that it's difficult to keep up with network requirements. I have devices where the MCU is 20+ years old, and the embedded TLS implementation hit a constraint 10-15 years ago.
This looks like the ideal use-case for these; your actual application lives in the M-core as it always did, but your network, TLS etc into an A-core that's much more suited to them, and where "fullsized" implementations are much more readily available.
Said no one in the industry, ever.