I like the RP2040
dgroshev.com
dgroshev.com
If you need digital girth, don't mess with lol 264kB RP2040 systems. Just buy $3 of DDR3L RAM (aka: 128MB) and run Linux for goodness sake.
---------
Even ESP32 is a glorified Bluetooth/Wifi chip first and everything secondary. You have to have a niche at this price point to be competitive.
RP2040's niche is the 264kB of SRAM, but not much else. It needs a bunch of external parts before it can become a reasonable solution as well, so its not really cost optimized IMO.
RP2040 sits at an awkward placement. It requires external parts, but low end SPI parts and not the nicer proper RAM like DDR3L or the like.
------
My point is that if you have a design that fundamentally requires external parts like the RP2040, the accurate comparison is against MPUs. Chips that are specifically designed to work with powerful and cost effective external components.
--------
Analog-focused designs like ATMega, ESP32 or STM32 comfortably do things that the real computers or MPUs cannot do. Like read a voltage, work with OpAMPs or other analog stuff that cannot fit on a proper Linux computer chip like SAM9x60D1G. And to do so without any external parts, so that you have the simplest design possible.
https://www.microchip.com/en-us/products/microcontrollers-an...
They're slowly getting better but analog is hard and I suspect they haven't prioritized it as much, historically.
"Silicon person", "silicon gal" etc would be weirder phrasing. "Silicon specialist" maybe but I don't personally think any of this merits discussion.
Not only did you (you guys, y'all, plural you, whatever...) mix up ye with you, using only the object form, but also started using it for thou and thee. Also, it was thy/thine not yours in the singular form.
I suggest you "fix" your language by reintroducing these words, they (plural they) are not completely lost yet (ref: dialects and the Bible).
https://langeek.co/en/grammar/course/8/archaic-pronouns#revi...
https://en.wiktionary.org/wiki/-est#Middle_English
I guess you're basically asking me to speak dialectical Yorkshire.
Many young people seem to use the gender-neutral "they" rather than "he" or "she", even when the gender is known and is unambiguous. This may turn out to be a fad, or it may be a similar generational shift in the language.
I don't know if it's generational, but on the internet it's less clear what someone's gender is, and assumptions have a decent chance of being wrong. The result is that I typically try my best to default to "they" for anyone who hasn't asked me to use different pronouns.
I would rather buy the RP2040 and the NRF7001/NRF7002 for the same or less total cost and have a substantially better wireless solution (5.4GHz WiFi 6).
E.g. see https://github.com/Ansem-SoD/Picofly.
Nintendo Switch modchip - PicoFly: https://github.com/rehius/usk. That is the OG source of the firmware behind the already mentioned https://github.com/Ansem-SoD/Picofly
OG XBox Modchip - Modxo: https://github.com/shalxmva/modxo (see initial impressions from ModzvilleUSA at https://www.youtube.com/watch?v=uUsov3i6jL0)
XBox360 NAND reader / writer - Picoflasher: https://github.com/X360Tools/PicoFlasher (used in the RGH3 hack for some versions of the console as described at https://consolemods.org/wiki/Xbox_360:RGH/RGH3)
Gamecube Modchip - Picoboot: https://github.com/webhdx/PicoBoot
Gamecube Optical Drive Emulator - Flippydrive: https://github.com/OffBroadway/flippydrive as described at https://teamoffbroadway.com/
The RP2040 real advantage its name, its price and its availability during the pandemic chips shortage. It lacks peripherals and it's power consumption is awful.
For me, the existence of a MCU/MPU with better features at better price is irrelevant if I can't get known parts on small form factor eval boards using top links on google. Yes, I'm that lazy, but we live in a world with an embarrassment of really good options compared to 20 years ago.
Normally, I can also test a domain-specific subcircuit or two in my "EVM" as well with no added design risk.
That's why you'd choose RP2040.
Yeah, would love these on RP2040.
As well as better ADC, "halved" (half mem, IO, PIO and CPU) cheaper version, "doubled" version (2x mem, IO, PIO and M4f CPU cores), integrated flash version, etc. Better power consumption.
That said, I do like PIO and you can use RP2040 as a PIO-peripheral to something more protected.
https://github.com/polpo/picogus
Emulates all kinds of sound cards, including the Gravis Ultrasound.
https://github.com/FreddyVRetro/ISA-PicoMEM
Emulates a memory extension, but also so much more stuff.
If you need a lot of IO - you're probably not looking at ESP32. It's just cheap and has WiFi builtin.
There are many options for other MCUs, that compare favorably to with RP2040... though majority aren't for the hobbyist market.
That's pretty interesting, could you list some?
For hobbyist levels, buying 1-10 pcs they are comparable in price to an RP2040 + SPI flash. However at volume pricing, the STM32 MCU's can be cheaper than just the RP2040 itself. I do think Raspberry Pi needs to figure out volume pricing if they want to be competitive for anything that's not just hobbyists.
You need to go up way above a dollar to get comparable specs, given the unique nature of rp2040, two cores with fairly high clock, 264kb sram, pio.
The only thing i dont like about rp2040 is the package, not hobbyist home soldering friendly for custom board designs.
> not hobbyist home soldering friendly for custom board designs
I assume by home soldering friendly, you mean too small. I'll make a case for why this isn't a bad thing...If it's difficult to solder a QFN package, then it will be equally difficult to solder the passives and flash it requires. Its price, availability, and good documentation make up for the package by creating an ecosystem of cheap boards hobbyists can use instead.
For example, I designed a keyboard around the Solder Party RP2040 Stamp (https://www.solder.party/docs/rp2040-stamp/). It integrated all the difficult components in a package that fit between the arrow keys and delete key.
Compatible winbond flash is available in sop-8 package which are very easy to solder. 1206 and 0805 are not hard to solder. Nobody is forcing you to use 0201 and 0402.
Sop, tssop or even LQFP-64 are still quite fine for hobbyists. Those can be soldered & most importantly examined quite easily.
Yes, there are various RP2040 boards that can be bought for as low as 2-3dollars a piece which makes the QFN package less of an issue.
If I need to design my own board, I would almost certainly likely use something else unless I need PIO or some other inherent quality of rp2040.
- Use home SMT reflow solutions like toaster ovens or hot sand in frying pans; or
- As the other reply suggested, use 'breakout boards' to turn the RP2040 into a through hole part; or
- Use SMT assembly services, which are getting cheaper all the time
It's not just a problem with the rp2040 - loads of modern parts have very fine pitches and/or hidden pads, gotta find a way to work with them or stick to aging out, larger parts and miss out on things like PIO.
TI, if you're reading this:
- Give me standard ARM SWD facilities / CoreSight
- Give me an accurate SVD
- Give me a 10,000 page document detailing the register maps and behavior of all peripherals
- Get out of my way
And nobody else will be able to compete. (Who has USB SS/PCIE/N GMACs in one product? PRU?)
Some lovely person got a quadrature decoder into 24 instructions, so you can potentially still do something useful on the same PIO block if you only need one or two quadrature encoders.
PIO actually came in handy for me when interfacing with an x-ray sensor which had 12 or 14 bits long UART data frame- not many micros have such a flexibility in their UART peripherals.
Damn TIL, never heard of that. I'll have to try it, thanks!
They are great for implementing very basic peripherals, but more than once I've started to implement something more complex just to realize it would be unacceptably slow and run out of space. If they were to beef them up just a little, they could easily replace the more trivial FPGA applications.
If it matters for the task, that FPGA will be able to achieve nanosecond-order IO/clock-to-clock skew times - PIO is painfully bad at this (and is executed serially.)
If the task will fit FlexIO's restrictions, the NXP IMXRT1011 at $1.70 blows away the $0.70 RP2040 in basically every metric.
The IC will be unobtainable in the next shortage, too.
I mean, don't you remember the shortage before where even capacitors were only hardly available?
Relative to other offerings, it's pretty nice (not a fan of ESP32 Xtensa or their new RV32 offerings - ARM chips are so much better) as a DIY/hobbyist/open source chip.
>[FlexIO is a] Highly configurable module providing a wide range of functionality including emulation of a variety of communication protocols
It is extremely capable! I have used it to hack together an octo-SPI... which stretches the definition of the S in SPI ;)
[1] https://www.nxp.com/docs/en/supporting-information/FTF-ACC-F...
[1] Video of the 2023 badge: https://www.youtube.com/watch?v=KWZriUMNpLc [2] https://rvasec.com/
It is exactly the same microcontroller! They're just two different packaging options. One is a 7" reel with 500 units the other is a 13" reel with 3400 units. (See "Ordering code" in the datasheet (https://datasheets.raspberrypi.com/rp2040/rp2040-datasheet.p...))
At first glance I'm not really seeing anything in GP2040 which couldn't have been done with any other somewhat-modern MCU. The RP2040 has undoubtedly been the catalyst leading to GP2040's widespread adoption, but it seems the same could've happened with a Pro Micro instead.
This all hangs on what "reinvigorated" means and I'm fine conceding the ground of not paying close attention in the intervening decade. I didn't think it was prohibitive back then, maybe it was in between then and now, and perhaps the barrier to entry is so low now that it's even better for gamers.
Brook boards alleviated some of that but that was still an extra $50-$100 depending on the vendor and available supplies and some hardware hacking that a lot of people were unprepared to do. Those who were willing to hack were hit hard because most fight sticks were taken off the market from back then and people got a bug up their butt about value during lockdown these old fight sticks started showing up for as much as $400 on Craigslist or Facebook marketplace. A 9 year old panthera was being sold for as much as a brand new Victrix. The market was rough. It still is for secondhand fight sticks.
This is why gp2040 was reinvigorating. With cheap pcbs and ready made firmware came cheap controllers. $50 gets you a 3d printed leverless. $150 gets you an aluminum leverless. There are mini boards that are just keypads with thumb sticks running the same firmware as full sized fight sticks with dual analog levers. You’re starting to see the same explosion in ideas and customization we saw in the keyboard space like 8 years ago.
I've used it in the Raspbery Pi Pico ($5) which comes on a nice board with lots of IO. There is a W version for a bit more with WiFi.
If you don't mind slightly less IO then you can order an RP-2040 Zero. I got 6 off AliExpress for about $12. These only have 23 IO pins but they have a reset button, USB-C and are tiny (1.5cm x 2.5cm).
The nice thing about all of these is that they use the standard Raspberry Pi dev tools, micropython, C++ just works with convenient USB loading of the firmware.
The Pico is really good at pin interoperability at least, in the land of ESP, what appears to be lots of IO pins quickly turns into barely enough if you're lucky, with pins connected internally to flash or the bootloader or whatever. I really wonder why they even bother breaking those out. The ESP32-CAM comes with 10 data pins, and only 4 of them are actually generally usable lol.
I mean, come on: no reset, huge form factor, only 2Mbit flash, micro USB - in 2024? Just about the only pro it has is that it is widely available.
As to your other points, I wouldn't mind more flash but I don't think the amount it has is particularly small. The micro USB, though, is a disappointment, though.
I mean come on, how do you fuck up USB-PD that badly? Unless you're doing it on purpose to force people to buy special power supplies sold by your vendors...
If you care about RAM consumption, you need to share the stack between tasks, forcing you to write event-driven code. Rust async makes this easy, and a bit of function coloring is no big deal compared to converting blocking code into event-driven code the traditional way...
The alternative mechanism is to use interrupts, DMA, multiple cores, distributed devices (eg a CAN network) a state machine, an RTOS, or, it sounds like in context of this thread, PIOs! You get the point. Do these provide a similar coding style? No, and that's the point. The coding style is the objection.
I find the "how else would you do it" style questions that come up frequently re Async rust (embedded or not) amusing. It's as if there is a new method of accomplishing a task, and asking a world that has been accomplishing this task for decades how it's possible to accomplish the task without the new thing!
Because of RAM constraints, all the bare-metal projects I've worked on have used manually-written state machines, and I'm comfortable enough with this approach. But sometimes these state machines can be hard to understand when the control flow is complicated, and I am seriously considering adding some compiler-generated state machines that will fit nicely into my existing model.
- the rest of your program doesn't have to be an explicit state machine; it can use structured control flow with nested loops and conditionals and subroutines
- the interaction between the interrupt handlers and the rest of the program is almost completely asynchronous, because as long as interrupts are enabled, the interrupt can fire between any two instructions of the rest of the program; if you look at it as multitasking, it's preemptive multitasking rather than cooperative multitasking. preemptive multitasking introduces a lot of hairy error cases, and this is only moderately simplified by the fact that the rest of the program can't preempt your interrupt handler, only vice versa. arguably that makes the problem worse rather than better because you can't solve the problem with locks (except by disabling interrupts as a sort of global lock)
This works well until the requirements change and you have to run two structured control flows simultaneously. If I find myself in such a situation and have no SRAM for a second thread, rust async may be the quickest way to accomplish the goal without a major rewrite into manual event driven code.
i feel like the same kind of thing can happen even if you start entirely async, because something that was previously synchronous may have to become asynchronous, which leads to having to revalidate all your concurrency assumptions all the way up its (static) call stack. wherever you were depending on not getting preempted, you need to change the code to not depend on that anymore. but if ram is so tight that you're concerned about the sram for a second stack, maybe that's a pretty small task rather than a major rewrite
that said, i don't recall having actually had that problem
The bare minimum would be one of the examples [1] compiled with a Rust compiler and then transformed into a .uf2 file with elf2uf2 [2]. You can then just drag and drop the .uf2 file into the "mass storage device" presented by the bootloader. To get the bootloader to mount, you press a button on a Raspberry Pico (or short two outputs if you're using bare RP2040) while plugging it in.
You'll probably want a debug probe [3] driven by probe-rs [4] at some point, it's just much more convenient to flash and debug with it.
[1]: https://github.com/embassy-rs/embassy/tree/main/examples/rp/...
[2]: https://github.com/JoNil/elf2uf2-rs
[3]: https://www.raspberrypi.com/documentation/microcontrollers/d...
[4]: https://probe.rs/
STM32 is horrible, if you don't want to use the HAL.. Everything I used (Atmel, ESP32, rp2040) was better than that - Tho I heard NXP is bad.
The same code will more or less run abstractly on an RP2040, as well (for common peripherals/traits.)
Yes, but AFAIK you don't have to use Arduino IDE for Arduino stuff? e.g. there is PlatformIO.
If you must use C, ESP-IDF/Arduino aren't terrible. But you still don't really have a package manager or means to abstract anything, especially across devices.
The cohesion present in Embassy between the HALs, probe-rs, etc. is really amazing.
With Embassy for example, I can run the same async/interrupt-driven I2C driver code on any number of different MCUs across various manufacturers. This holds true for many, many different types of peripherals in the ecosystem. For the unique peripherals, implementation style and interface are extremely consistent and high-quality.
JLC will assemble a RP2040 board for you for <$3/pc at quantities of 5.
From Wifi/Bluetooth Antenna, LI Battery Controller, Ethernet whatever, Display or Camera Connector - You choose.
And then we have a multitude of even CPU choices and when running on a coin cell it makes a difference powering a second, unnecessary core or even wifi.
And with the C6 variants, Espressif even switches ISA again, from 8266, to ESP32 to a RISC-V based ISA.
So you are comparing the first of its kind SOC with a decade old Family of SBCs.
The silicon chip itself for an ESP has:
bluetooth, ethernet, wifi, SD/EMMC, and a bunch more "peripherals" built into it.
The RP2040 does not.
To make this painfully clear:
For an esp32 to do wifi you wire the esp32 to an antenna.
For an RP2040 to do wifi you wire the 2040 to another chip, and that other chip to an antenna.
Do you see the difference?
I could just as well say "For an RP2040 to do USB you wire the RP2040 to the connector. For an ESP32 to do USB you wire the 32 to another chip, and that other chip to a connector."
It's clear to me GP has the impression that ESP32 is something more (a development board with an ESP32?) than the ESP32 "chip" itself.
1: https://www.espressif.com/sites/default/files/documentation/...
To be clear, GP is the one saying the ESP32 is more than just the chip itself, complete with battery controller and camera connector.
On a second re-read it seems we agree.
People generally refer to the module, not the isolated chip. The modules are effectively like a chip that you solder to the board.
The main benefit of those modules is: it's already certified with FCC and others, so you don't have to re-certify your design for radio communication. Since RP2040 does not have a radio, this is unnecessary.
- board with a battery charger: https://learn.adafruit.com/adafruit-feather-rp2040-pico/powe...
- board with camera: https://www.waveshare.com/pico-cam-a.htm
Ignoring the module results in a flawed comparison. The module is chip and frequently used.
If they encased the module in plastic and called it a chip, it would be the same. You can think of it as a chip.
Here's a pic of a module and several boards that demonstrates all of that.
It's very clear that GP has an odd misconception that an ESP32 is some kind of development board complete with "connectors" and possibly a battery charger, while an RP2040 is just the SoC itself.
That's why I like RP2040 so much. Datasheet is amazing and clear, even for someone like me who hasn't spent too much time in embedded world.
There is a special, much shorter document just for hardware design that makes designing a board that uses RP2040 even easier.
Look at any Nordic part or NXP part to see what a datasheet is supposed to look like. 3000+ pages with register documentation and behavioral examples.
I’m not talking size of documentation, but it’s “bio-availability”.
> From Wifi/Bluetooth Antenna, LI Battery Controller, Ethernet whatever, Display or Camera Connector - You choose.
None of those are in-chip peripherals. Besides, the RP2040 comes with a lot of peripherals too. Not as much as an ESP32 by a wide margin, but still.
Not all versions have all these features. You can pick one based on the features you need.
you might be able to find american-designed (or european-designed, african-designed, antarctica-designed, etc.) chips that do something similar, but you can be pretty sure they will be made either in taiwan or in the rest of china
in a now-deleted response to this comment, you asked, 'How is it relevant in the thread I started by asking for american designed chips?'
you didn't ask for american-designed chips. you asked for non-chinese chips, but many chinese chips are american-designed (in some sense, all of them, since transistors and integrated circuits are both american inventions). literally what you said was
> Is there a non-Chinese equivalent of ESP that compares in terms of module integration re: Wifi et al? (but perhaps not cost)
i just went back to see if you'd edited your comment, but no, that's literally what you said, byte for byte
For Wifi, the only competition I'm aware of is the wireless STM32 series from ST Microelectronics: https://www.st.com/en/microcontrollers-microprocessors/stm32...
For BT, Nordic's nRF series is pretty popular. In the DIY world, I mostly know it in the form of the nice!nano, a keyboard controller.
These range from $4 to $14 for MPU + Wifi.
I think you're mistaking the ESP32 devkits for the ESP32 itself. The thing that comes with an antenna, battery controller and any kind of connector whatsoever is a devkit or at least a module. The ESP32 itself is a small IC just like the RP2040.
For example you might be thinking of a devkit like this: https://docs.espressif.com/projects/esp-idf/en/latest/esp32s...
Which is itself based on a module (e.g. ESP32-S3-WROOM-1), which just bundles the ESP32-S3 IC with a few niceties (like wifi antenna or connector).
The equivalent for the RP2040 would be the Raspberry Pi Pico, which does come with some minor niceties (like a wifi variant). There are other products that package it with different peripherals.
> So you are comparing the first of its kind SOC with a decade old Family of SBCs.
Neither the RP2040 nor ESP32 series are SBCs and neither has any SBC lineage. The Raspberry Pi SBCs were all Broadcom based, the RP2040 is a brand new IC developed by Raspberry Pi and afaik has no IP licensed by Broadcom.
On the one hand, it's a great chip for hobbyists. It's cheap, it's easily available, it's easy to build a board around, and it offers plenty of stuff for your average application.
On the other hand, it's definitely a bit lacking from a professional perspective. The peripherals are fine, but once you start looking into the details it's easy to run into limitations. That XIP interface is great - but it doesn't support writing so you can't hook up an FRAM chip and expand your memory. That PIO interface is amazing - but having only 2x32 instructions is quite limiting once you try to implement more complex interfaces. And where are my Timer/Counters? No capacitive touch? Analog on only four pins? No 5V tolerance? No high-speed clock input for the PIO modules? Why can't I run the bootloader off the internal ring oscillator? Hmm, a USB-C PHY sure would've been helpful...
I was also surprised about its poor ESD performance. An Atmega or STM32 can handle the occasional zap just fine - ESD protection is more of a nice-to-have on external-facing ports. The RP2040? If you don't add external protection to every single pin you are basically guaranteed to see a few of them die due to day-to-day use.
To summarize: neat chip, great for hobbyists, wouldn't be my first choice in professional environments.
With PIO or the SPI master and DMA you could absolutely make use of a USB HS PHY.
IE: if FRAM comes free with your MCU, might as well use it and take advantage of its benefits. For example: MSP430FR4132, just picking one such MCU off of Digikey (https://www.digikey.com/en/products/detail/texas-instruments...)
------
Most of what I know of FRAM comes from TI's marketing pages. https://www.ti.com/document-viewer/lit/html/SSZTA32
the msp430fr4132 you linked costs 160¢ in quantity 35, which is actually considerably cheaper than comparable flash-based chips like the msp430f233 https://www.digikey.com/en/products/detail/texas-instruments... which is 500¢ in quantity 25. so that's maybe one reason people would use fram: evidently it's cheaper than nor? but i'm pretty sure there are μcs with 8k of nor flash that are cheaper than that and in fact cheaper than the price difference. is this pricing policy some sort of loss leader by ti to drive fram adoption? it seems unlikely. does using fram instead of nor make it cheaper for ti to make the chip? surely 8k of nor couldn't account for such a large cost
on further investigation, i don't find μcs with 8k of nor flash that are cheaper than that, at least in stock at digi-key and still in production. https://www.digikey.com/en/products/filter/embedded/microcon... is the link to my search, which i trust hn will abbreviate in a useful way. but lcsc has the ch32v203 in stock for 39¢ in quantity 100 https://www.lcsc.com/product-detail/Microcontroller-Units-MC... and that has 20k of sram, 64k of flash (presumably nor!), and 24 gpios. that's half the gpios of the ti chip, but i believe my digi-key search linked above was not limited by pin count
so maybe the only reason fram costs more is that ti doesn't license the fram patents to chinese companies? it still beggars belief that ti (and microchip, st, etc.) would be spending three dollars a chip on 8k of nor, or even three dollars a chip divided by two layers of profit margin
So I'm pretty sure NOR Flash remains quite cheap. TI's MSP430 are all cheapest with FRAM though, so your question is curious. I admit I don't know where to go or how to investigate your question however. I don't really use MSP430 myself, I just know thats what is commonly associated with FRAM in the literature I've read.
just as a perspective point on 'quite cheap', nor is still about a thousand times more expensive than nand
i would never buy from ti. they hate hobbyists and have since at least the 70s. they put limor fried on a blacklist
FRAM would allow you to have your cake and write it: your application code survives a reboot, and (if the chip were to gain write support) the remaining space could be treated like PSRAM.
you can probably use qpi that way (with both psram and flash) if you sacrifice xip and settle for loading overlays? you could even store them on qpi nand
> Raspberry Pi pulled a Henry Ford and boldly went with just one microcontroller.
However, this one size fits all thing doesn't work for me. I prefer to use the least microcontroller that will do the job I need done.
> There is no choice, no right sizing, but that might be OK! An RP2040 costs ~70 cents, and not all gizmos are produced by the million.
The reason I like to use the wimpiest microcontroller possible is not related to monetary cost. It's related to my power budget. Most of my projects are battery-powered, and having them use the least possible amount of juice is a huge advantage.
But even so, why use a $1 microcontroller when a 20 cent one will do the job equally well?
Getting more use out of the battery is a good and sufficient reason to use a less powerful controller, though. It being cheaper is nice in theory, but almost meaningless for a one-off project, in practice. I can't remember the last time I made a purchase which was a fraction of a dollar, it just doesn't move the needle.
The RP2040 does have a great advantage for people who are new to the microcontroller game, though! For me, personally, that doesn't matter much because I'm not new at this.
I agree, in a one-off or small run project, the cost of the microcontroller is usually irrelevant. I only mentioned it because when all else is equal, I'll go for the least expensive option anyway.
First, the drama with PlatformIO really rubbed me the wrong way. I'm taking the side of the developers who are hurt by confusion in tooling.
Second, the top of the line ESP32-S3 comes in a module format that can be dropped on a PCB with basically nothing but a few decoupling capacitors. The RP2040 requires careful placement of about a dozen components, including a crystal. Not only does a module reduce implementation complexity dramatically, standardization skips every engineer potentially making their own dumb component placement mistakes.
Third, the ESP32-S3 has 14 GPIO pins that can be configured to do capacitive touch, while the RP2040 has none. Most of the projects that use RP2040 and capacitive touch rely on the MPR121, an IC that past its EOL and will likely cause a lot of hasty redesigns over the next few months.
It's also worth saying that eventually RP2040 will likely release more or less powerful versions, and hopefully versions in a module format. I doubt they will ever let it become an STM or PIC situation, but the ESP32 product lineup doesn't look so crazy once you are acclimatized to it.
It's a weird situation, but I think PlatformIO built up a dominant position by supporting all these platforms and accepting community contributions to do so, then tried extracting value from the manufacturers directly after the fact, blocking further community PRs that would add new board revisions or fix bugs. See related: [2]
[1] https://github.com/platformio/platform-espressif32/issues/12...
[2] https://github.com/platformio/platform-raspberrypi/pull/36
It is an extremely weird situation, and a deeply bad look. If I was pressed for an opinion, I would say that I wish Eben had taken the high road and gone all in on supporting PIO despite the tangy mystery aftertaste for the simple reason that it would be a net-positive for developers.
The way things stand, migrating away from the Arduino IDE to using VSCode with RP2040 feels like you're being actively messed with; there's so many projects and forum posts that sound like the right path, when it seems like the actual answer should be super simple. This is super painful for newcomers.
I never followed all the ins and outs but from having a quick look through the comments on https://github.com/platformio/platform-raspberrypi/pull/36 the following happened:
- Developer independent of RPi opens PR to add RP2040 support to PlatformIO
- PlatformIO don't want to merge it, expecting some financial contribution to help maintain the support (seems reasonable)
- They discuss this with RPi, ultimately RPi don't want to pay the asked contributions so that PlatformIO are happy maintaining support (this also seems reasonable)
- End result is no RP2040 support in PlatformIO
Ultimately maintaining things isn't free. RPi have chosen the development environment(s) they wish to support and it hasn't included PlatformIO. What's weird or a bad look?This is a hypocritical stance for any project that accepts free contributions from the public. Besides rent-seeking, what reason could justify preventing the community from maintaining features/microcontrollers that the organization is unwilling to (due to costs)?
Platformio I suspect.
Example with 23 touch buttons if I counted that correctly:
I have only implement touch buttons for hobby projects using a different MCU, but is there a reason to not just use the PIOs for touch sensing?
It's huge, it only exposes 26 GPIOs.
I'm not saying Pico sucks by any means. It has uses and places. It's just very not this: https://www.digikey.ca/en/products/detail/espressif-systems/...
To be fair, the chip is designed to make these really easy to place. There's pretty much one single layout which makes sense, and it provides easy access to all the pins you could possibly want. Combine that with the excellent documentation they have provided, and it's essentially just a multi-part drop-in design you don't ever have to think about again.
It did look a little bit intimidating at first, but it was a genuinely pleasure to implement.
Even if you create a sub-module layout that you include in every project you work on... that's still n slightly different permutations of the same thing, even if they are all perfect. (They aren't.)
Literally none of this is actually a hazard if you design more than one PCBA with a microcontroller on it in your entire life. I'd argue that designing around a castellated-edge module is much MUCH harder to get right on the first try than discrete components, even though the parameter space is apparently much smaller.
0. https://datasheets.raspberrypi.com/rp2040/hardware-design-wi...
Part of hardware design is letting go of your neuroses. The real world isn't a perfect place. You operate with the situation you have for the design at hand.
Ask yourself why you really need everything to be the exact same.
Laying down a handful of capacitors, a single of QSPI flash, and a crystal should become second nature to anyone professionally practicing in this field.. it should take 30 seconds to position and rotate these components near the appropriate pins and not too much longer to route (minutes at most if you've done it before for this MCU.)
I'm out of the loop, have been using rp2040 since launch and never used platformIO.
How did you use it and what rubbed you the wrong way?
Developing locally either with cmake and pico sdk or micropython seems very easy... why add platformio in the mix?
And we've never found a way around that for the decades we've been putting Atmel, STM, TI, Ambiq, Nordic, etc chips in our designs... There's an intern 2 yards away from me who will be wrestling with getting the right components in place around an STM, for his very first pcb design. This is not a hard problem for anyone who has been doing this for any period of time.
And anyway, those dozen or so components are the oscillator/crystal circuit, the reset holdup, and the 3.3v supply. And then like a bazillion decoupling caps. Certainly, antenna tuning can be hard, but if you can use chip antennas, its not that hard.
All of those are so bog standard that when I looked at e.g. the adafruit RP2040 Feather's schematic, I was sort of surprised at how much is just lifted wholesale from all of their other feathers. Like, the only difference between the RP2040 feather and the nRF52840 feather is the micro itself, the timing circuit (all 5 components of it for the RP2040), and the antenna circuit for the Nordic board.
As to the convenience of modules, I submit that they are very handy for sale to the hobbyist market, but if you want to actually sell your products, you still have to go through the process of RF certification (although at a lower cost. Only you can decide if the higher upfront cost of using a module vs. spinning your own is offset by the lower certification cost), so the benefit is a lot more mixed. Even so, you're only saving the antenna tuning step, which is usually done as a BOM variation, not a major trace adjustment.
As to the dozens of STM and PIC chips, TI has the same situation. Customers want to pay for only what they need and those manufacturers have the manufacturing capacity to support that desire. Its not daunting if the difference matters. This is very much akin to complaining that Home Depot sells too many different kinds of lumber.
As for capacitive touch ICs, sure Adafruit only carries one. But mouser carries 199 that are not end of life. To keep that functionality going, adafruit need only pick up one of them. The cheapest one is even in a TSOT package, so the DFM will be pretty easy. Hell, if I'm not too tired from my job designing and programming these things, I might go home and spin one up tonight. Ought to only take me an hour or so. And the I2C driver another couple hours.
I doubt it was your intention given the disclaimer there, but based on my own research into this issue, this is a highly misleading statement, especially for small volume products.
Full FCC RF certification is not only very expensive, but also very complex from what I understand. It is NOT an easy process. That is why these modules are so popular in many actual commercial products.
If you need FCC certification for your product and use a pre-certified module (and presuming no other radio hardware is present), you only have to undergo the testing for an unintentional radiator I believe, which is a much simpler prospect.
The difference in cost is said to be in the neighborhood of $5K to $10K, though I haven't gotten any actual quotes yet, so I can't give anything definitive there.
Disclaimer: IANAL of any description, and I have not yet gone through this process myself; I'm just researching it as I get ready to produce a product. Do your own research, or better yet, hire someone who truly knows this stuff!
Its certainly true that a module can save you a lot of money for small volumes. Its actually pretty easy to figure out where the tipping point is: Its the difference in certification costs divided by the difference in BOM costs. Its a little bit more complicated when you factor in economies of scale, but by and large, module costs don't fall off as steeply as individual components do.
Touch is a niche single tasker. I'm glad they didn't include it. Using another ic for that makes sense, and folks being lazy and sticking to an EOL part to provide that functionality isn't RPi's problem. Or do it in software.
I'm with the OP on this one, I really think the foundation nailed the product definition.
I expect to do this exact same exercise with absolutely every single semi-complex IC (MCU or not) I use - it's a routine activity.
I have had 14yo kids do the PCB layout for RP2040 on our custom handheld console. They had no trouble.
Nor did I with my ~10 boards.
Crystal is the simplest, decoupling can be a chore, but only if you add them too late. Power can be 90% done with a pour under the package.
When it comes to the Raspi Pico and similar devices[1], I think UF2 flashing is the best thing since sliced bread. This alone lowers the barrier for beginners significantly.
Things I don't like: power consumption.
But you can't have everything...
[1] I know it is not restricted to RP2040 boards, but I think it is nowhere as common as there.
I understand it could use ~0.08W, given it draws 3.3V at ~24mA... I am not a specialist, is that a lot?
Ref.: https://learn.sparkfun.com/tutorials/rp2040-thing-plus-hooku...
https://www.ti.com/lit/ds/symlink/mspm0g3507-q1.pdf
--------
RP2040's full-speed is okay. 20+mA is a lot but it is easily explained by the absurdly huge SRAM banks it has.
But RP2040's sleep states are absolutely AWFUL. The Cortex-M0+ chips are all extremely power-competitive vs each other, because Cortex-M0+ is extremely low-end with regards to core-design.
You're pretty much only getting a Cortex-M0+ because its the absolute minimum 32-bit processor on the market. (8-bitters and 4-bitters exist if you're willing to go even lower-end, but Cortex-M0+ is the bottom of ARM's offerings). So low-power seems to be a must in this market, IMO anyway.
If you're willing to use higher amounts of power, you really should get a few more features, like an FPU on the Cortex-M4.
Lots of variables go into this figure, but 24mA isn't great.
I agree with the authors points that the RP2040 is a great chip would love to see the Pico W pricing come down as popularity grows.
Espressif also went many years with only the ESP8266, then many years more after introducing the ESP32 before this recent binge of releasing a new series every time they blink. ESP-IDF is really suffering for it, so I hope Raspberry avoid this fate or at least find a better way to support them all.
This is the official Espressif "ESP Product Selector". I checked everything in the ESP series, and limited to "Mass Production" status, and then it showed me a list of 175 products.
I'm sure some of those are doubled up, or just the same chip with different packaging options or whatever, but as a potential customer I'm still presented with 175 things and told to pick one.
As a developer, it's much more difficult to navigate when there are 8 files with the same name, 5 registers with the same name defined in different files, etc. A lot of code is heavily punctuated by ifdefs to selectively include and exclude lines for different targets, making it more difficult to follow. Intellisense struggles, no matter how well it's configured.
I could deal with all that but it's the runtime cost that is the worst. ESP-IDF is constantly getting bigger and slower. All of these abstractions, structs half-full of pointers being handed about at runtime, dead code being linked in for features the chip doesn't even support, it all has a cost.
This is even worse in binary blobs where conditional compilation is more difficult to do. I'm not convinced they're even trying though. A single commit that only mentioned WiFi 6 changes increased my binary size by over 10kB. On a chip that doesn't support WiFi 6.
Can anyone explain what this means? How is it both read-only and updateable? If the latter, how is it unbrickable?
If the bootloader itself was faulty, the device would be bricked.
When the bootloader is not read-only, you can upload another bootloader.
This is great in a different way because custom bootloaders allow for more flexibility.
For example, you may want to keep two copies of your firmware on the chip: One that you're uploading, and one you can fall back to if the most recent one has problems. This protects you against failure during firmware upload or post-deployment failure, because you only overwrite one of the two. So if the device switches off while flashing it, and you boot back up, a custom bootloader can just default to the older copy.
But... what if you update the bootloader and it fails?
Then you can't use the bootloader to upload new firmware. Bricked.
To unbrick a bootloader you need to overwrite the bootloader using alternative methods that don't involve the bootloader, which usually involves attaching wires to the print. This is highly inconvenient in a production setting: Maybe your hardware is encased, embedded in a bigger thing, or located on a pole on a mountain top in a different country.
So a read-only bootloader is a safe choice, and you can make other workarounds wrt. flexibility.
My gut says if you're worried about this in the bootloader, it might be doing too much.
When I actually have these conversations with security guys, it's because they've either missed their window on contributing to part selection (in one case because that team hadn't been hired yet!) or no one consulted them in the first place. In both cases the solution is to write some guidelines and get the EEs to use them during part selection in the future.
Stage 1 bootloader is the one in ROM and it normally just reads stage 2 from the flash chip. Stage 2 then initialises the flash properly, and you can have further stages like [2] to implement the trial-rollback procedure.
Stage 1 is a safety net, even if the trial-rollback procedure goes terribly wrong the device can still be unbricked over USB.
[1]: https://blog.usedbytes.com/2021/12/pico-serial-bootloader/
By the way - real commercial MCUs have boot ROMs with connected watchdogs, trial boots, and recovery boot processes.
(It just takes a long time for the OS to recognize a USB device. And you have to press the reset button yourself in order to enter the bootloader. With something like J-Link, your build script can handle pressing the reset button and sending the code, saving you quite a bit of time between iterations.)
I make open source espresso machine hardware (github.com/variegated-coffee), and it's nice to be able to give users a wired way to update firmwares that doesn't require extra hardware.
However, the appeal of mounting as a mass storage device is not for iterative development (as you mentioned). Invariably something breaks, and the easiest way to get back on track is to reflash their default blank firmware using the mass storage interface.
UMS seems like a nice idea when you first hear about it, but it doesn't really offer much once you look at it closer. The only proper argument for it is "no special software needed", but it a world where picotool is `apt install picotool` away that's not very advantageous anyway and only causes automount annoyances.
UMS shines where you have a device with a filesystem in its flash that you can access to actually manage the files stored there. Super useful for stuff like MicroPython. In contrast, pseudo-mass storage like on RP2040 doesn't seem very useful at all. It makes it appear more approachable, but only superficially.
I just think that despite all testing and care bugs are still possible, and the ROM bootloader is a backup that's always there. Plop a tiny switch on the PCB, and even if I screw up an OTA update customers will still be able to flash with no special tools (if the device has a USB port, that is).
I also use it as a recovery state for panics, makes the device impossible to brick by a panic loop.
That's orthogonal to mass storage mode. ROM bootloaders were standard in this class of microcontrollers for years, but they usually don't use UMS. One could argue that UMS is perhaps better than some custom incompatible solutions, but then that's what DFU is there for - a standard way to flash things over USB.
Small to medium production runs are always a bit of a pain, because you have to do a lot of coordination with the factory when it comes to tooling. You have to ship a custom programmer, get them to install the drivers on whatever OS they are using, and then find a way to write custom code to interact with the programmer and deal with all the possible error conditions.
The RP2040? A simple script which detects the presence of a RPI-labelled flash drive, copies a file, and repeats. Written in half an hour. Drivers? Not an issue. Hardware? Everyone has a USB cable lying around already. Error conditions? It either succeeds, or it doesn't - the OS handles the rest.
The bootloader allows you to update the device with new firmware. MCU are different than computers. And since you can't overwrite the bootloader, you can't brick the MCU. You can always just reset it.
fwiw; I've never bricked an MCU buy flashing something weird onto it. The hobbyist MCUs sold are typically quite easy to re-flash with new firmware.
I've never seen other uC accidentally blowing out bootloaders, though. They have clever tricks that prevents write access on a firmware area while also allowing such firmware area updates.
I suspect the author might have heard about some horror stories like AVR's intentional in-circuit programming disabling feature accidentally triggering due to configuration errors upstream to developers or sporadic errors in data transfer, which "just" needs requires +12V input to unlock. Presumably the 2040 won't have such gotchas that scares hobbyists.
While many CP implementations are flawed, or can be bypassed by a skilled attacker (power glitching, &c), I wouldn't say they are purely theater, as they raise the required investment from a <$10 ISP to $$$+ for something like a chipwhisperer.
It's like locks: Every time a manufacture claims to have made an unpickable lock someone goes and picks it. It's the same for chip security features.
Microcontroller "security" features really are security theater and not actual security. The only real reason they exist is because certain vendors/"big buyers" will require it as part of their parts checklists (which is silly) and it provides a way for chip manufacturers to wriggle more money out of each sale.
I’ve never worked with a BGA device. I’m guessing you need to design a board send it to say pcbway and then have the equipment to solder the bga in?
Generally, all single-row package pin layouts are easier than double-row (BGA, WLCSP, 2-row QFN) to reflow.
Of course you can design your own custom board, but I'd wager most people don't need or want to do this.
I think BGAs are easier to "hand" solder than other footprints (QFP, QFN etc). You drop the item in place, place it on a hot plate and or heat gun, and start melting it. Of course, if you screw it up, you are screwed. (Reballing sounds not worth it for most cases). And, you can't visually inspect.
I think this is because, at least for me, most of the soldering faults I have are due to uneven application, or improper amount of solder. BGA solves this.
Keep in mind that it's not just the RP2040 that is difficult to solder. To do a decent PCB layout you'll need to use very small passives in order to get the placement right. I did my layout with mostly 0402 resistors and capacitors - I know plenty of people are capable of hand-soldering those but I think it would be difficult for most. Perhaps easier if you had a decent microscope, which I do not have yet. I don't think my magnifying visor would be nearly enough.
0402 (inches) is small but doable. They really start to feel like grains of sand at that point.
But I personally stick with 0805 and 0603 when doing my own board layouts. I can't say I've ever felt space constrained. The placement of decoupling capacitors can be a few mil off, and in fact the "extra space" for placement helps your tweezers anyway, so you don't really want to push everything so close together.
Especially for hobby projects, I don't think anyone is really in the business of counting up the savings of 0.01" in the hobby world. Like, how small are you actually aiming for, and is it really so bad that you can't add another 0.5" to your board?
--------
Professionals use 0201 (inches) for maximum flexibility and minimal sizes. So even 0402 is larger than professional projects. If we're all accepting "larger hobbyist sizes" anyway, might as well go all the way up to the much easier 0603 or 0805 parts.
While a 0402 is slightly larger than a grain of sand, I'd say 0805 is approximately the size of a grain of rice. So yeah, doable with tweezers and solder paste. Just imagine lining up dry rice and its well within the capabilities of most hobbyists.
Its just problematic when you get smaller than that.
It's not really about saving board space. Decoupling capacitors need to be placed "close" to the chip, and at higher clock frequencies this can be an issue. There's enough decoupling caps needed on a RP2040 that doing them in 0805 would require moving them quite a bit further away from the chip just to have room to place them all.
An ATmega (Arduino) at something like 8MHz is really forgiving and you can take a lot of liberties with the layout. The RP2040 runs much faster at 133MHz, so presumably the tolerances are much tighter. Admittedly, I didn't try a doing a design with 0805s for the RP2040 but I read enough from people more experienced than me that gave me the impression that compromising the layout with larger passives had a greater chance of things not working right.
Since assembly is so cheap at places like JLC these days, even in small quantities, it really wasn't worth the hassle. I've done many other boards by hand with 0805s and and agree they're pretty easy to deal with.
All of these rules are just rules of thumb.
The "rule" is that your Power Delivery Network (PDN) needs to have low-enough impedance to function properly. High parallel capacitance and low series inductance/resistance. Longer leads increases inductance and resistance so closer is preferred.
But for even 100MHz designs, you're well under the size where 100mil or 0805 would cause any serious problem.
-------------
So the "secret" is that all faster designs (100MHz to 300MHz) have substantial on-package capacitance.
Take a look at this design, which I admit is Microchip/Atmel MCU, but its running at 300MHz and not just the relatively low 133MHz of the RP2040.
https://lcamtuf.coredump.cx/bob-the-cat/
Those are LARGE 1206 1uF capacitors. Which is actually scary to me because we're not looking at tight 100nF decoupling caps anymore but instead substantially relying upon "on-package" capacitance.
Still, it shows that lcamtuf was confident in this 300MHz processor handling far-away 1206 capacitors, showing how much wiggle room we have in practice in these designs.
You shouldn't worry about 100mil of movement of 0805 caps on a 133MHz design. After all, there are real designs that are closer to 500 mil that use 1206 caps on a 300MHz MCU.
--------
I'm honestly scared for lcamtuf here and would never design a board like this. But I'm really not worried about 0805 caps on relatively low speed 100MHz (or even 133MHz) MCUs. Especially if you're properly "teaming" them up so that their resistances are paralleled and inductances are paralleled. (Notice that lcamtuf's 300MHz design doesn't even have the 10x recommended parallel 100nF capacitors close to any of the pins!! He's really stretching the specs)
-----------
But yeah, my personal preference is majority of 0805s and 0603s for the "close" decoupling capacitors. I know there's plenty of wiggle room here (even if I'm not as aggressive as lcamtuf's designs).
If you're using PCBA from another shop, I guess its all "free" to you to use 0402s or whatever they got loaded in their chip-shooters. So might as well take your free pre-loaded resistors. But if I'm assembling a board myself, I definitely prefer the larger size.
It's good to know that the "closeness" requirement of decoupling caps is perhaps not as important as I had believed.
In contrast, we hobbyists deal with "rules of thumb", because none of us will spend $4000+ on professional PCB software that run these calculations for us. And furthermore, we aim very conservative because its very difficult to debug a PCB layout issue... as we hobbyists are functionally blind to all of these issues (ex: trace inductance, trace capacitance, or other issues).
I think spending a good bit of time on PDN / grounding / etc. etc. study is very worth your while.
https://www.youtube.com/watch?v=ySuUZEjARPY
2+ hour talk on just the issue of good "grounding" design in PCBs, but it does relate to this issue of capacitors, trace-lengths and the like. I feel like you'd benefit from this talk.
The "correct" way of thinking is exceptionally complex, far more complex than what is taught in colleges. But you have all the basic ideas thanks to the old rules of thumb. You just need to take the next step to see what the problems are.
--------
And as you'll see, traces on the same side of a board are cake. Its things like vias that actually wreck you.
[0] -- https://www.amazon.com/Soiiw-Microcomputer-Soldering-Preheat...
[1] -- https://www.chipquik.com/store/index.php?cPath=470&osCsid=8t...
-----
Note that BGA chips mostly come pre-soldered / solder balls. You also design PCBs so that there is a "well" for the balls to melt into and settle into place, and molten-solder has a significant amount of surface tension, so you can magically watch the solder "pull" your designs into place. Of course, the OP is likely talking about QFN not BGA, but... just in case people are worried about BGAs its not terrible... (its just impossible to inspect a BGA XRays).
The surface-tension can be harmful in the case of tombstoning (ex: a resistor or capacitor with two leads, especially a "sideways" low-inductance capacitor, will get "pulled up" by one side, lifting off the 2nd pad).
If you have a solder-plate + hot-gun, you can "feel" the surface tension by just grabbing a toothpick and pushing on these components as they're still hot. You'll find the pressure to be far higher than you expect.
I'll keep your experience in mind then. Thanks for sharing your experience.
Things like the Pico are really easy to solder onto a designed PCB as well because of the castellations, so it's easy enough to design a board around the footprint and then just solder the entire pico onto your PCB with a soldering iron, avoiding the need to use something like a hot-plate or reflow oven. This has been my preferred way of working with it.
QFN is doable at home, though more difficult than TQFP leads or larger SOIC-chips. Still, far too many components are QFN today so its a good skill to pickup.
------
The techninque is:
1. Reflow soldering brings the _whole_ board to soldering temperatures, and then relies upon surface-tension to pull all the devices into proper place.
2. Solder paste is applies ahead of time. You can cleanup solder paste with a toothpick before you bring the board up to temperature. Solder paste tends to go bad pretty quickly however. When doing prototypes, opt for the more expensive low-melt solder paste to minimize potential heat damage.
3. Prefer to use a stencil to apply solder paste. But its more than doable to be sloppy with a syringe and then rely upon the solder mask + surface tension to magically cleanup things during reflow temperatures.
4. Use a hot-air gun to fix any issues. The #1 issue you'll have is tombstoning, QFNs or TQFP chips are usually pretty good about settling into place. For TQFP issues (ex: bridging), you'll need solder-wick + soldering iron. EDIT: And flux: lots of flux helps. Also, flux goes bad, so throw away Flux all the time and keep buying new batches.
---------
BGA is also doable at home btw, thanks to the above principles. But its even harder than QFN. The real issue of BGAs is that you're looking at 4-layer minimum, maybe 6, 8, or 10-layer designs. There's also substantial grounding and other advanced PCB concepts you need before you can layout a BGA-capable PCB.
Its not so much the physical activity of soldering that's hard or difficult for BGAs. Its all the theory you need to study to breakout BGAs + minimize inductance + deal with impedance matching and trace-length matching.
I've never tried this but this makes a lot of sense in my mind's eye. I'll try this next time I have such an issue.
-------
TQFP seems nice because I can sloppily shove tons of solder down, and then just wick up all the excess solder with solder wick. In fact, I purposefully over-solder all the TQFP joints for this practice. (Too much solder during reflow, and then just a quick cleanup step with a soldering iron later).
Many of those listed are the same controllers in various modules. Espressif has a bunch of different µC series, but not that many. In contrast, aside of the whole Pico dev board, Raspberry Pi does not offer any ready-made module with RP2040.
I love the generic PIO though, I really hope other manufacturers pick up on that.
Unfortunately the Pi Foundation is seeking patents on the PIO architecture. I don't think they've been granted yet though.
Right?... Right?!?
You can think of an FPGA as a bunch of "programmable transistors". You've got a whole bunch of basic logic building blocks, and you program the wires between them to build a logic circuit. This means it is great for building relatively simple but high-speed logic (grab sample from sensor, do some additions and multiplications, store result in external DRAM chip, repeat at 5GHz). However, they are really inflexible: getting them to do different operations depending on some condition is extremely costly.
The PIO, on the other hand, is essentially a really basic CPU core. It reads and executes a stream of instructions, and it can do (very simple) math and conditional logic. This means it is great for building some kind of state machine, which dynamically adjusts it behaviour based on some kind of external condition. The unique selling point of the PIO is that the instruction set is completely designed around super-fast IO, so reading or writing two dozen pins can be done in one or even zero(!) instructions. And because every instruction executes in exactly one cycle, you've got really good control over the exact timing. This makes it ideal for implementing hardware-level protocols in software.
I haven't seen a more recent update, unsure if they abandoned the patent bid or if it's just taking a while to go through the system.
DFN-8 ICs take up 2x3mm and take 30 seconds to route.
And it cost six bucks from US distributors. I can buy a single RP2040 chip from Digikey for 70 cents. Even if you add another dollar for flash memory, you are still far better off.
I care more about the cost to manufacture boards with the part, than the cost to get sample parts mailed to me in the US :)
Once I decided to start using the RP2040 I realized the "strange" flash situation turned into a feature, not a drawback! With STM32 you pick your part and then you can order an expensive version (if it's available!) with the max RAM of say, 512Kb or you can save a few bucks and go with say, 64Kb. Either way you're paying like $2.50-4 for a single chip.
Now compare that with the super fast, dual-core RP2040 which costs $1 (yeah it's technically $0.70 in bulk) paired with a 16 FUCKING MEGABYTE SPI flash chip (W25Q128JVSIQ, basic part at JLCPCB :thumbsup:) that costs $0.60. You get a vastly more capable MCU with so much goddamned flash space you could fit a truck in there!
You can even partition that flash chip's space so that your RP2040 firmware is reserved to the say, the first 2MB (or wherever you wish!) and the rest can be used for storing stuff like settings. It eliminates the need for an EEPROM! Not to mention there's enough storage space in there to store all your settings in something absurdly inefficient like JSON and the chip is fast enough to parse it too!
Working with the RP2040 in reality is just SO NICE. Seriously, try it! You won't be disappointed.
Not a problem for most hobbyist projects, but when you start to push the limits the ESP32 feels like a chipboard apartment building compared to STM32's concrete and rebar. Hopefully the RP2040 doesn't suffer the same problems.
The pin flexibility is nice, I agree with you there. But I spend more time dealing with the flash chip than that saves me.
I don't want more capability. An STM32 M3 has far far more processing throughput than I need for 99.9% of what I do. I want the smaller thing, even if it isn't cheaper. It is sufficient.
I love stm32s because I can write bare metal C without using any of stmicro's libraries at all (except the one header defining the register offsets). Here's an example: https://github.com/jcalvinowens/ledboard/blob/master/firmwar...
The rp2040 is not set up to easily let you do minimalist stuff like that. And after all, why would they go to the trouble? You have 16MB of flash to waste on library code you never call... it's like buying a mack truck to commute to work.
I'll also echo the other comment about the cache: if you actually have megabytes of .text, you're gonna have a bad time.
The RP2040 is absolutely usable from simple registers and documentation, not sure where you got this idea.
The reason you want multiple megabytes of space in a professional product: identically-sized bootloader partitions for trial boots.
Obviously it's usable that way, I said it wasn't as simple (the hardware is more complex to initialize).
Using "megabytes of space" for "trial boots" sounds like a rube goldberg machine that would cause more problems than it would ever solve on a chip you can't OTA, but feel free to argue with me :)
See https://pico-adc.markomo.me/ for a thorough analysis of the problems.
Especially look at the DNL.
It has been using the RP2040 to create cheap and easy to make controllers for fighting games while providing the lowest possible input delay.
The RP2040 does a great job acting as a chip for the base of a gamepad, so it doesn't even have to be for a fighting game controller, but any controller you want to create.
I'm not personally convinced. Most of the ESP32 series is cross-compatible (at least for the shared pinout counts).
I'd argue the brand recognition and marketing to hobbyists is more likely what brought the "community" around the RP2040.
I currently work in e-commerce using Ruby on Rails, which I really enjoy. However, I do miss my previous work on the weird side of software and electronics for art installations on galleries and events[0]. If anyone wants to chat about or pair on embedded development, feel free to reach out to me at my username at hey.com. [0]https://vimeo.com/389519079
Add $1.00 and you're into Cortex M7s with vastly more peripherals/power (NXP IMXRT1011.)
I agree with the post in 100%, I use RP2040 for both hobby projects and my keyboard startup project (arrowmechanics.com in case sb was interested).
IMHO What RP foundation did is the greatest breakthrough in the world of embedded tech projects since the popularization of atmegas.
Everyone needs Flash, and RP2040 has none. Very few projects need more than 32kB of SRAM (especially on an anemic Cortex-M0+ core). You're missing an FPU (like on Cortex-M4 or higher chip), so DSP capabilities are awful even if your clock speed is high.
RP2040 has awful power consumption: 20mA. The M0+ competitors are 10mA, 5mA, or even sub 1mA. Once we get to more recent Cortex-M23 or Cortex-M33 (or the 8-bitters)... many competitors sleep in the under 1uA (!!!) regime, meaning "always on" chips (when you're under 15uA or so, you're undercutting many battery's internal leakage currents, so your chip's current usage becomes a rounding error). RP2040 is incapable of "always on" computation like this, so this limits applicability.
RP2040 has some peripherals, but its missing common modern components. Many competitors (AVR DB, TI's MSP430 and MSPM0, STM32G4) have OpAmps for mixed-signal conditioning. Most competitors have multiple analog-comparators. DACs are somewhat uncommon but AVR and TI offer them.
-------
So comes the question: what kind of project are people using RP2040 for? It can't be cost-optimized, because by the time you buy a flash-chip and external oscillator you've overrun the costs of the competitors.
Its not power-efficiency, because RP2040 is a power-hog. You're getting far less battery life compared to competitors. (Case in point: the microcontroller that handles your wireless credit-card transactions is battery-less, running purely off of the energy of latent energy waves in the NFC protocol. RP2040 will never reach these low levels of power consumption).
Where I see RP2040 as useful, is utilizing its absurd 264kB SRAM (far, far larger figure than most chips). If you need a graphics framebuffer for a small 300x200 8-bit color screen or something, then RP2040 is probably the right choice. (60kB for the framebuffer, and likely 2 or 3 of them for various computations on the frame buffer).
But outside of a display driver, its difficult for me to find projects where RP2040 is actually the correct choice. Besides, screens are relatively expensive (in both $ and in power consumption), so if you're getting a screen you probably can upgrade to a SAM9x75 with full 2D GPU, DDR3L 800MHz and Linux support for like $12 for those SiP packages.
-------
At a minimum, the next version of RP2040 needs to include on-board Flash / on-board programming. This is something _every_ project needs (RP2040 needs to run its code off of _something_ anyway). The fact that it ships flash-free is incredibly absurd to me at least.
RP2040 forces a microprocessor-mindset ("one chip" where you add a bunch of addons) inside of the low-cost microcontroller market segment. Its very strange.
You might get your wish there with their next chips, their last investor report revealed that it will be the "RP235x family". Based on the naming scheme they established with the RP2040 that would be two Cortex-M3 cores with ~512kb RAM, and the "X" placeholder being the amount of onboard flash where the RP2040 had a "0" for "no flash", so that implies there will be a range of models with different amounts of integrated flash.
The rp2040 is a great chip at a decent price point.
However the internal ADC is quite bad for wide range readings. There's a few points around 512 / 1536 etc where it gets a "personality" in the readings.
AVR seems to have this down much better along with internal references for even more accuracy.
I do wish there were more ADC channels though. Even an external analog mux costs more than the whole RP2040...
Commercial 16-bit/4ch ADCs can be obtained for <$0.90 in modest quantities.
The RP2040 ADC is not good, and I am not often sampling something close to my noisy MCU. I'd rather route I2C anywhere than worry about signal integrity routing my analog signal a mile across the board.
https://en.wikipedia.org/wiki/ISO_26262
There's nothing in ISO 26262 that would prevent someone from using an RP2040 in a car. You'd just have to be redundant about everything which you have to do anyway regardless of the chip you choose.
Also, ISO 26262 is not a law. It's up to the auto manufacturer whether or not they'd require it and no single chip on its own can claim to be "certified" (or similar) for ISO 26262 since the focus is on redundancy and error checking (which means one chip would check the status of the other and vice versa, not some special internal consistency checking feature... That's just marketing).
Most "automotive" versions of chips (e.g. Atmel's stuff) are just branded that way. Atmel will make a claim like, "this chip has been tested to function properly under these sort of extreme conditions..." (that happen to match what car manufacturers are looking for) and then a car company would just trust that and make it so that only chips that are marked "automotive" and manufactured by Atmel will be allowed to be used by their electrical engineers (or suppliers).
It's all entirely arbitrary though: If you can convince the manufacturer that your board works fine under the conditions they require they'll probably buy it. Well, they won't hold it against you that you used one chip or the other. They just want some assurances.
If some part claims to be AEC compliant it's basically just the manufacturer saying so. There's no independent body or even standardized tests to prove a part adheres to any given AEC document. Their own docs state as much:
AEC Certification
Note that there are no "certifications" for AEC-Q100 qualification and there
is no certification board run by AEC to qualify parts. Each supplier
performs their qualification to AEC standards, considers customer
requirements and submits the data to the user to verify compliance to Q100
In other words, it would be up to any given car manufacturer to verify the claims of any chip vendor using their own testing methods. Since they're going to have to do that anyway, slapping AEC-(whatever) on a product doesn't mean much.If you test your part in similar conditions and make some availability promises you too can slap an AEC-Q100 label on to your chip!
Fwiw I'm working on my own consumer product/dev tool and I'm very happy with the RP2040.
Lack of code security and onboard flash weren't dealbreakers for me here, but others will have more stringent requirements. QSPI is so incredibly cheap now.
Probe-rs [2] works perfectly well with GDB and the CLion debugger.
[1]: https://embassy.dev/book/
[2]: https://probe.rs/
Yes. In fact, the official getting started guide[0] is all command-line based, with an optional chapter later on about using VS Code if you wish.
I have a low volume product in production using the RP2040 and I've never once opened up any sort of GUI for developing the software or programming it.
[0] https://datasheets.raspberrypi.com/pico/getting-started-with...
The first problem with the chip is that it has zero security. Not important for hobbyist, I get it, however, for professional applications, this can be very important.
Not, it isn't always about not wanting people to read your code. The application in question was a networked industrial controller with a thousand nodes. At a minimum, there's a need to ensure that the code and data cannot be altered. External memory does not allow for this. Our customer understood supply chain issues and agreed to accept the RP2040 design provided we replaced all nodes (at a cost) once a non-RP2040 node could be manufactured.
Before I talk about the other problem I have to admit not having looked at the RP2040 ecosystem for about two years. No idea if this has changed.
The other problem is that the RP2040 team was --again, don't know if this changed-- down-right hostile about Windows. They would respond to requests for better Windows support with moronic statement like (paraphrasing) "Just switch to Linux. It isn't that difficult".
These statements were both tone-deaf and ignorant of realities out there. When you start dealing with non-trivial, non-hobby designs, there's a need for practices such as PLM (Product Lifecycle Management). When your entire engineering organization is using CAD, CAM, EDA and other tools rooted in the Windows ecosystem, you might not have the freedom to switch to Linux just because you bought a little $0.50 chip. It doesn't work that way.
Even worse, if we did that, we would be forced to store a full VM with the working Linux distribution and RP2040 toolchain with every single release of the design. Note I did not say "software". I am talking about mechanical, electrical, optical, multi-board firmware with different processors, tests, manufacturing, manufacturing testing, etc.
In other words, the ill-informed "just switch to Linux" attitude simply revealed that --at least at that time-- this organization did not understand the professional/industrial embedded world in the way companies like ST and others actually do.
The net result was that, as much as the chip was super-interesting, we dropped it like a hot potato as soon as we could and moved back to the STM ecosystem, where the chip provider doesn't think that asking us to upend our entire workflow for single chip is a sensible suggestion.
It is hard to beat that 5uA deep-sleep current!
If anything, they implement RISC-V debug and trace specs, or earlier vendor-specific, as these specs are relatively new.
I don't see anything like SWD being consistently defined by this spec, though?
Otherwise, NXP FlexIO is very similar to PIO and these are much more capable chips.
Almost all embedded devices have a secondary boot loader.
Do you understand my question now?
Yes, it has a DFU on the boot ROM.
This seems like a very weak argument.
IMO (just based on the specs; haven't actually used it), the main reason to use this is for the PIO stuff. That's a very niche use case though.
This is like the iPhone strategy against Nokia. When I worked at Nokia it produced many variant phones - each with a little more ram or a bit less or a better screen or a different chipset. This was because they thought that people bought on price and wanted to have a product at every price point.
The builds took more than a week to finish, the bug fixing was horrendous. The software sometimes had to work with not enough RAM sometimes with different chipset bugs, different graphics limitations. It was a nightmare to produce a quality product. Then out of e.g. 18 phone models we had to customise each one for 1000 operators in the world which intensified the pain and effort.
At that time Apple had one iPhone. It was over specified - lots of RAM, great graphics etc. They only had to test their code once - not 18 times.
PIO is interesting but I'm not fully convinced they're better than a suite of dedicated timers, especially in the realm of power-efficiency.
The _real_ wtf?!?!? spec here is 264kB of SRAM. At this price point / power-consumption, that's a _LOT_ of SRAM. Any application that needs a ton of SRAM (ex: 300 x 200 pixel 8-bit LCD screen) will find good use in the RP2040.
A lot of the other parts of the RP2040 are quite lackluster. PIO is "interesting" but seem somewhat overhyped to me.
PIO has its use cases.
I've had the liberty of working with older platforms like the PIC32, and while I agree that every MCU has it's own use case, the developer community Microchip has no comparison to Espressifs. I will admit that I may be comparing apples to oranges.
Thoughtful, I suppose. Entirely futile, however, as you can see.
Meanwhile, Expressif chips are literally everywhere and becoming ever more ubiquitous.
Edit: Thanks friends for the correction. It is cool you can still buy an RPi Pico for $13.00 :)
It's a micro controller, on which the Raspberry Pi Pico is based, at $4
The main chip in the Raspberry Pi Pico is the RP2040, which costs $4.
These are $4 or less at most vendors, and JLC will assemble 5 for you for <$3/ea.