doc: add AVR documentation
This commit is contained in:
parent
85f8543e17
commit
286f8968fd
50
doc/avr.txt
Normal file
50
doc/avr.txt
Normal file
@ -0,0 +1,50 @@
|
||||
# Working with AVR microcontrollers
|
||||
|
||||
# Assembling AVR binaries
|
||||
|
||||
TODO
|
||||
|
||||
# Programming AVR chips
|
||||
|
||||
To program AVR chips, you need a device that provides the SPI protocol. The
|
||||
device built in the rc2014/sdcard recipe fits the bill. Make sure you can
|
||||
override the SPI clock because the system clock will be too fast for most AVR
|
||||
chips, which are usually running at 1MHz. Because the SPI clock needs to be a
|
||||
4th of that, a safe frequency for SPI communication would be 250kHz.
|
||||
|
||||
Because you will not be using your system clock, you'll also need to override
|
||||
SPI_DELAY in your xcomp unit: the default value for this is 2 NOP, which only
|
||||
works when you use the system clock.
|
||||
|
||||
Alternatively, you could run your whole system at 250kHz, but that's going to be
|
||||
really slow.
|
||||
|
||||
The AVR programmer device is really simple: Wire SPI connections to proper AVR
|
||||
pins as described in the MCU's datasheet. Note that this device will be the same
|
||||
as the one you'll use for any modern SPI-based AVR programmer, with RESET
|
||||
replacing SS.
|
||||
|
||||
(TODO: design a SPI relay that supports more than one device. At the time of
|
||||
this writing, one has to disconnect the SD card reader before enabling the AVR
|
||||
programmer)
|
||||
|
||||
The AVR programming code is at B690.
|
||||
|
||||
Before you begin programming the chip, the device must be deselected. Ensure
|
||||
with "(spid)".
|
||||
|
||||
Then, you initiate programming mode with "asp$", and then issue your commands.
|
||||
|
||||
At this time, only fuse commands are implemented. You get/set they values with
|
||||
"aspfx@/aspfx!", x being one of "l" (low fuse), "h" (high fuse), "e" (extended
|
||||
fuse).
|
||||
|
||||
Each command will verify that it's in sync, that is, that its 3rd exchange
|
||||
echoes the byte that was sent in the 2nd exchange. If it doesn't, the command
|
||||
aborts with "AVR err".
|
||||
|
||||
At the time of this writing, it is recommended that you perform your commands in
|
||||
batch, that is, running your commands right after the "asp$" command, ending
|
||||
your batch with "(spid)" so that the next batch works. In my tests, interacting
|
||||
with the chip "live" in a single "asp$" session sometimes resulted in unreliable
|
||||
data that didn't properly detect sync errors. TODO: investigate further.
|
Loading…
Reference in New Issue
Block a user