|
|
|
|
|
by vardump
4862 days ago
|
|
You don't need a full IP stack in order to do something useful. 32 kB flash and 4 kB RAM is more than enough for basic IP-networking. http://www.rowley.co.uk/msp430/uip.htm - requires less than 2 kB RAM, 12916 bytes of flash. http://dunkels.com/adam/miniweb/ - a minimal "web server", supports only one connection at a time among other restrictions. But it needs only 30 bytes of RAM. Yes, 30 bytes, not kilobytes. |
|
While something like uIP definitely can be used (and is being used) for IoT applications, uIP only is an IPv4 endpoint. Most IoT applications have a wireless communication medium which by its nature is fluctuating and unpredictable, so you'll typically want to have support for a self-healing wireless mesh network. Such a mesh network adds a bit of complexity, code footprint, and memory usage. And since existing low-power meshing standards like IETF RPL are defined for IPv6 and not IPv4, you need to have support for IPv6 as well. So in the end, the nice and small footprint of uIP will have grown. Also, the footprint for uIP given on the Rowley page are for the stack alone, and does not include things like radio drivers or an OS scheduler.
For a full-mesh low-power IPv6 IoT system, a more realistic figure is what we have in Thingsquare Mist (http://thingsquare.com/mist/), where mesh nodes with a full Contiki OS and IPv6 support have a code footprint closer to 50k than 12k. That said, we have successfully been running Thingsquare Mist on devices with 32k flash and 4k RAM, like the KL02 ARM device in the article. But this has been for non-mesh fringe nodes that only used UDP/IPv6 multicasts to communicate with its immediate neighbors, and no mesh networking.