I'm posting some thoughts in the hope of receiving some useful feedback, or at least bringing together information that is currently scattered a bit all over the place on this forum.
I'm working on a low-power embedded application that requires some long-term data logging (1 gigabyte, maybe a few). I've been looking for a suitable storage solution for quite some time now and I could not get to a reasonable, where reasonable means that it does not have serious/concerning drawbacks in one way or another. I'm quite surprised, but it seems that NRF microcontrollers have been designed completely neglecting this use case.
Here is what I looked into and some reasoning
- NOR memory is well supported, but I would say it is mainly intended as an extension of the program memory. There is the possibility of using this as storage as well, but probably more for configuration/system state. NOR memories are essentially too small/expensive to scale for any "large" storage application, this is quite established.
- Raw NAND memory would be the way to go for this use case. Raw NAND brings some extra challenges due to the inherent unreliability of the storage medium, which needs to be solved in firmware with some Flash Translation Layer capable of handling read/write errors, bad blocks and wear levelling. It's also possible to find large memories that work at 1.8V, which is an extra bonus feature for any low-power application. However, most of the large memories come with a parallel interface. NRF chips do not have any dedicated memory controller, which means the only option would be bit-banging. A major tradeoff in my opinion.
- There are some SPI NAND chips, although usually not with large capacities, and there does not seem to be a large offer for any capacity of 8Gbit (one giga-byte) or above.
- The most common solution that I see is to use SD cards via SPI. This is rather inefficient, but it works and allows access to large storage with low complexity. However, this option feels basically like a hack, and I'm not sure if it would be acceptable in large production.
- eMMC is from what I understand the de-facto standard "place and forget" solution for managed embedded storage. However again no NRF chip has a controller capable of interfacing eMMC, which again only leaves the option of bit-banging.
- There seems to exists some very esoteric "IC SD cards" but again, not really an option on which one can rely.
Am I missing something? I am currently working with SPI NAND memory, but also due to the problems mentioned above, I'm even considering switching to a completely different microcontroller.
I hope this can help other people (and hopefully me as well) to orient themselves a bit better.
@Nordic or anybody who designed a similar application, I would really appreciate some inputs on this!
Thank you!