Inspired by the Zero Gecko Starter Kit roadtest review of baldengineer , I'm going to try if I can get the weather station example log its data to an SD card.
The example shows its data to the lcd screen by default. I wonder if it's possible to log to a microSD in stead.
We already have the weather station up and running, and we have a working SD card example.
But there are roadblocks: baldengineer has made an attempt to do this, and he ran out of memory space.
I've made some calculations based on the memory footprint of both examples,and they exceed the available resources significantly:
The SD Card code, in debug, takes:
Running size tool
arm-none-eabi-size "STK3200_sd_card.axf"
text data bss dec hex filename
19828 180 2716 22724 58c4 STK3200_sd_card.axf
The Weather Station footprint:
Running size tool
arm-none-eabi-size "STK3200_weatherstation_2.axf"
text data bss dec hex filename
26024 140 2552 28716 702c STK3200_weatherstation_2.axf
These are the resources available on the starter kit's processor:
Silicon Labs EFM32 Zero Gecko Microcontroller with 32 KB Flash and 4KB RAM - EFM32ZG222F32
The 32 KB Flash needs to cover what is (if we naively combine the two compilations) 19828 + 180 + 26024 + 140 = 46172
The 4KB RAM has to host 180 + 2716 + 140 + 2552 = 5588
In this blog I will try to get an example that measures and logs all the measurements done by the weather station.
I will not try to replicate the motion detection or LCD part. That is part of the weather station's GUI, and I'm trying to replace that by a logging mechanism.
If I get a code base that fits the resource available in the kit, I'll try to include some additional power save measures.
No guarantees here - the footprint above is way over the controllers capabilities, so we'll have to reduce both code and memory significantly.
Update: working data logger + wiring diagram
You can follow the steps I took to get to a working example in the comments below.
The example I have attached here is functional, but not optimized for energy and sturdiness.
What should happen for energy optimization:
- The processor should go in low power mode in between measurements
- Complete power-off of the SD card when not writing
- Buffer measurements and write to SD card when buffer is full
What should happen for sturdiness and user experience:
- A mechanism to safely remove the SD card while not being written (maybe a button push when you want to remove the SD card, a led blinking slow when the card can be removed, and the led flashing fast when the buffer is reaching its limit while the SD card is out
- Management for file full
- timestamp
Size statistics with full debug configuration:
arm-none-eabi-size "STK3200_weatherstation_sd_logger.axf"
text data bss dec hex filename
32536 120 1384 34040 84f8 STK3200_weatherstation_sd_logger.axf
Size stats with release target and size optimization:
arm-none-eabi-size "STK3200_weatherstation_sd_logger.axf"
text data bss dec hex filename
16924 116 1380 18420 47f4 STK3200_weatherstation_sd_logger.axf
The wiring
The project is attached here. Good luck