Zerowi: bare-metal WiFi driver for the Raspberry Pi

Running Linux on the Raspberry Pi offers many advantages, but raw speed isn’t one of them; it can be difficult to achieve a high data throughput when the Operating System (OS) keeps intervening. So for some demanding applications, it may be desirable to run without an OS, in ‘bare-metal’ mode.

This isn’t easy, since it is necessary to program all the functionality from scratch. There are various projects on the Web to provide console I/O and USB support, but I haven’t found any bare-metal WiFi drivers. This project rectifies that omission, providing some C code that has been written from scratch to drive the WiFi chips on the Raspberry Pi, and similar boards and modules. Due to the complexity of the development process, the project is split into several parts:

Part 1: resources. The hardware and software resources used in the project

Part 2: SDIO. A description of the SDIO interface between the CPU and wireless chip.

Part 3: initialisation. The subsystems within the chip, and how to initialise them.

Part 4: loading firmware. Loading the Cypress firmware into the WiFi CPU, and getting it running.

Part 5: IOCTLs. Control & configure the subsystems, and scan for wireless networks.

Part 6: Networking. Join a network, with WPA or WPA2 security

Part 7: TCP/IP. Communicate with other systems.

Source code: on GitHub.

Bluetooth: the wireless chip does have a Bluetooth capability, but I’m afraid this project is focused on WiFi only.

Copyright (c) Jeremy P Bentham 2020. Please credit this blog if you use the information or software in it.