- Introduction
- 1. Background
- 2. Hardware/knowledge requirements
- 3. Setting up a development environment
- 3.1. Linux
- 3.2. Windows
- 3.3. macOS
- 3.4. Verify the installation
- 3.5. Setting up your IDE
- 4. Meet your hardware
- 4.1. micro:bit v2
- 4.2. Rust Embedded terminology
- 5. Meet your software
- 5.1. Build it
- 5.2. Flash it
- 5.3. Debug it
- 5.4. Light it up
- 6. Hello World
- 6.1. Toggle it
- 6.2. Spin wait
- 6.3. NOP
- 6.4. Timers
- 6.5. Portability
- 6.6. Board support crate
- 7. Registers
- 7.1. RTRM
- 7.2. (mis)Optimization
- 7.3. 0xBAAAAAAD address
- 7.4. Spooky action at a distance
- 7.5. Type safe manipulation
- 8. LED roulette
- 8.1. The challenge
- 8.2. My solution
- 9. Serial communication
- 9.1. *nix tooling
- 9.2. Windows tooling
- 10. UART
- 10.1. Send a single byte
- 10.2. Send a string
- 10.3. Naive approach and write!
- 10.4. Receive a single byte
- 10.5. Echo server
- 10.6. Reverse a string
- 10.7. My solution
- 11. I2C
- 11.1. The general protocol
- 11.2. LSM303AGR
- 11.3. Read a single register
- 11.4. Using a driver
- 11.5. The challenge
- 11.6. My solution
- 12. LED compass
- 12.1. Magnitude
- 12.2. The challenge
- 12.3. My solution
- 13. Punch-o-meter
- 13.1. Gravity is up?
- 13.2. The challenge
- 13.3. My solution
- 14. Snake game
- 14.1. Game logic
- 14.2. Controls
- 14.3. Non-blocking display
- 14.4. Final assembly
- 15. What's left for you to explore
- General troubleshooting
- How to use GDB
- Magnetometer Calibration