We just got through reviewing MicroPython on the ESP8266, and one of the main takehomes is that our ESP modules need more flash memory. You may be in the same boat — the earliest (and cheapest) modules on the market only had 512 kB of flash. For over-the-air programming, or to give you some more space for fancier programs, you’re going to want 1 MB or even 4 MB.
The solution? Just buy a new flash chip and solder it on. This is especially easy if you’ve got an ESP-01, ESP-03, or ESP-11 modules where the flash chip is exposed. Desolder, resolder, done. It can be a little trickier for those modules with a tin can around chips, but that’s nothing that a little hot air can’t fix. See the video embedded below for a good walk-through.
When ordering parts, don’t confuse 4 Mb (megabits = 512 kB) with 4 MB (megabytes = 32 Mb). Most manufacturers of flash will specify the bits number, so the part you want will have a 32 (for Mb) somewhere in its name.
With the price of flash being even cheaper than the cost of the ESP-01s that are cluttering up your junk drawer, you’ve got very little to lose by giving it a try.
You even can have 16mBytes by using 25Q128.
The ESP8266 data sheet mentions 16mBytes as maximum and NodeMCU has started to support it with PR#1367. We need to watch PR#1390 for a while because it interferes with PR1367. Let’s stay optimistic and hope for 16m support in MicroPython too… ;-)
More:
http://www.instructables.com/id/ESP-03-Upgrade-Flash-Memory-to-128-M-Bit/?ALLSTEPS
https://github.com/moononournation/nodemcu-firmware
How do you store 16mBytes? That’d be 128mbits or 0.128 bits. I’m hoping MicroPython aims a LOT higher than fractions of a binary digit!
Capital M lower b is for megabits, not millibits. 128 Mb div 8 -> 16 MB Mega Bytes
Good news is that the “darker” ESP-01s must have a little larger flash modules to begin (I think 1MB), so no pin bending needed to upgrade to 4MB. I used the W25Q32FVSSIG: http://i.imgur.com/Qd9UZJL.jpg
Just noticed my esp-201 “clone” has a Berg Micro flash chip BG 25Q80A SICG – 1550, which is claimed to be an 8Mb chip (1MB) also.
Just noticed my esp-201 “clone” has a Berg Micro flash chip BG 25Q80A SICG – 1550, which is an 8Mb (1MB) chip also. Not sure what the max memory the esp can handle is, ordered some W25Q64FVs and W25Q128FVs. Will try both.
…see http://www.instructables.com/id/ESP-03-Upgrade-Flash-Memory-to-128-M-Bit/?ALLSTEPS
Now that is one excellent hack.
Thanky manky
I have a ready source of 64Mbit spi Flash (Winbond 25Q64FVSIG) scavenged from discarded prototype boards. Thus, when I started using the ESP-12 (which has a tin shield) on projects, it was a natural to swap out the flash. I don’t have an immediate need for the 8MB of flash, but it is comforting knowing the added capacity is there.
It’s good to know I can use the 25Q64 SOP8 chips I purchased to replace the Lattepanda firmware chip, now that I returned the LP piece of junk for refund those 25Q64 chips need a home!
I had to laugh when I read about 512 MB being insufficient for a µC. That’s twice as much as my first desktop PC had!
Not that I’m implying that it’s not a minuscule amount of memory…
It’s 512 kB, not mB.
He’s talking about 512MB, not mB.
MB and mB is the same, the difference is in the letter ‘b’, b = bit, B = byte. mb = megabit, mB = megabyte
Correction; yes, ‘m’ and ‘M’ means micro and mega but you can’t have microbits.
M=mega (1E6), m=mili (1E-3), u=(1E-6). Well “u” is just representation for real sign greek letter “μ” for easier/faster writing on standard keyboard.
My OCD brain says no, it’s actually KB and MB in upper case.
The way I learned it:
Lower case k=kilo=1000
Upper case K=Kilo=1024
Lower case m=milli=1/1000
Upper case M=Mega=1000000 or 1048576 depending on context
Lower case b=bits
Upper case B=bytes
And yeah, the need for that much memory for a microcontroller blows my mind. My first computer had 8KB (64Kb) RAM. You kids with your modern Python crap, get off my lawn! :-)
A toe core rect probably.
I also initially learned data units in the same way, but it’s not correct any more. For example MegaByte (MB) was being used to represent 2^20 (1024 kilobytes), however the SI prefix mega is supposed to represent 10^6 (1000, not 1024). Therefore now the correct way to represent 2^20 KiB (kibibyte) is with the suffix MiB, or mebibyte. More details with a useful table:
https://en.m.wikipedia.org/wiki/Kibibyte
Correction – Prefix not suffix
Screw these millennials and their nonsensical units, poor work ethic, and flat user interfaces!
My KB will always have 1024 bytes in them, just like every computer still does.
No. K is never K, always k. To differentiate between binary and decimal powers you use kB and kiB.
the article is talking about 512 kB, thats Kilo, not Mega as you’re saying,
Yep, and there are people whose first home computer was one of the MOS 6502 or Zilog Z80 based devices that ran of a cassette tape and stored < 128kB too. ;-)
4KB TRS-80 Model-I, bitches!
Intel SDK-80: 8080 Processor with 256bytes RAM, later upgraded to 1024bytes via a 2102 RAM chip. Connected to outside world via Teletype with punch cards and paper tape. Still working, with original documentation from Intel.
Got a Trash-80 too. Serial # 0000111.
You should see my valve collection…
Young pups indeed!
HA! 8031 with 128 bytes of ram, SDK are for wimps. Wire wrap your first computer,
Now get off my lawn!
PS: 803x/805x are actually pretty nice processors though I do like the current line of toys we have. :-)
I have to agree that people needing more than 512 MB for micro hurts my head. Think about the Commodore 64, Apple II line, and the Atari line of computers as well as all the CPM machines. Heck my Amiga 1000 only had 512k until I had and Starboard with 2MB on it. Lots of memory is good but my gosh has it gotten big and cheap.
You miss some points.
Most of the flash will be used as “hard drive” to store files.
And your 512k computer had an ethernet+ip-stack? wifi/wpa2-support? Access point functions? Some sort of rich real time multi tasking os?
The thing here is that they are not programmed in python or similar script languages. Because today’s computers have so much memory and speed, people get lazy, so we need a lot of kilobytes of flash and few megahertz just to blink a led.
I could understand this if he was flashing less but it appears, at least from his other videos, that the intention is to program robots without needing to connect a USB cable to it. In the video previous to this one he described using pogo pins to program one of his other projects, and while it worked it was a pain because disassembly was required.
I remember booting Linux, with an X server from 2 floppy disks. http://freecode.com/projects/natld
It makes you wonder what is using up all that memory.
640K ought to be enough for anybody.
Thanks, Bill!
I’m going to track it down, but a link to the microPython review would be nice :)
We’ve written a couple articles on it recently. You’ll want to type “micropython” into the search bar.
Just about any dead (or otherwise) UEFI based computer will have a pretty substantial SPI EEPROM on the motherboard.
EEPROM isn’t the same thing as Flash.
They are usually pin-compatible with similar/identical base command set
meh….. The chips you are looking for can be readily harvested from motherboards.
[Insert joke about stealing kidneys.]
A valuable thing to remember here is that there are different “SOIC” packages – JEDEC and EIAJ versions. So SOIC isn’t actually enough for a concrete footprint specification.
Pin-bending, bodgy-soldering hacking is possible, but for a professional look, if you’re fabbing boards, it pays to check first.
Although the smaller devices (e.g. 8kb on the older ESP-01 modules) are usually the smaller, more common 8-pin JEDEC SOIC, the larger flash chips (e.g. 32Mb) are usually the larger (EIAJ) package.
It’s a really nice and good hack. But I really miss the credits for the creator of the video? Why is the name of Andreas Spiess not listed?
I did multitasking on a Z80 using the alternate registers . I used to use 805x micros every where even the 84 pin plcc made by Semens down to the 18 pin. Does anyone remember the 8052-BASIC with a basic interpreter.. machine language takes up way less memory than high level language compilers.