initial commit
This commit is contained in:
commit
60db522e87
107 changed files with 36924 additions and 0 deletions
67
doc/spisd.md
Normal file
67
doc/spisd.md
Normal file
|
|
@ -0,0 +1,67 @@
|
|||
# SPI SD-Card Controller
|
||||
The SPI-SD-Card controller uses a single register at address $880.
|
||||
|
||||
## Reading the register
|
||||
|_bit_ |31|30|29|28|27|26|25|24|23|22|21|20|19|18|17|16|
|
||||
|- |- |- |- |- |- |- |- |- |- |- |- |- |- |- |- |- |
|
||||
|_Value_|- |- |- |- |- |- |- |- |- |-|- |- |- |- |- |- |
|
||||
|
||||
|_bit_ |15|14|13|12|11|10|09|08|07|06|05|04|03|02|01|00|
|
||||
|- |- |- |- |- |- |- |- |- |- |- |- |- |- |- |- |- |
|
||||
|_Value_|- |cd |cc |cb |tr |te |ra |ro |d |d |d |d |d |d |d |d |
|
||||
|
||||
|
||||
|Bitfields|Description|
|
||||
|---------|-----------|
|
||||
| _cd_ | card detect |
|
||||
| _cc_ | card changed |
|
||||
| _cb_ | card busy |
|
||||
| _tr_ | transmitter ready |
|
||||
| _te_ | transmitter fifo empty |
|
||||
| _ra_ | received byte available |
|
||||
| _ro_ | receiver overrun |
|
||||
| _d_ | received byte data |
|
||||
|
||||
Reading the register does not advance to the next byte in the read fifo. This is done by using the DR bit on a register write (see below).
|
||||
|
||||
## Writing the register
|
||||
|
||||
|_bit_ |31|30|29|28|27|26|25|24|23|22|21|20|19|18|17|16|
|
||||
|- |- |- |- |- |- |- |- |- |- |- |- |- |- |- |- |- |
|
||||
|_Value_|- |- |- |- |- |- |- |- |- |-|- |- |- |- |- |- |
|
||||
|
||||
|_bit_ |15|14|13|12|11|10|09|08|07|06|05|04|03|02|01|00|
|
||||
|- |- |- |- |- |- |- |- |- |- |- |- |- |- |- |- |- |
|
||||
|_Value_|- |CW |CF |Cx |Cc |Cd |DR |DW |D |D |D |D |D |D |D |D |
|
||||
|
||||
|
||||
|Bitfields|Description|
|
||||
|---------|-----------|
|
||||
| _CW_ | control write |
|
||||
| _CF_ | enable receive filter |
|
||||
| _Cx_ | enable transceiver |
|
||||
| _Cc_ | force spi clock on |
|
||||
| _Cd_ | write clock divider |
|
||||
| _DR_ | read acknowledge |
|
||||
| _DW_ | data write |
|
||||
| _D_ | byte data |
|
||||
|
||||
* CF, Cx and Cc flags are used together with CW
|
||||
* Cd together with d sets the clock divider
|
||||
* DW together with d writes a data byte
|
||||
* if the receive filter is set, all received bytes are ignored until a byte is received that is not $FF
|
||||
* receiving a byte that is not $FF disables the receive filter
|
||||
* Cc is used to enable the clock without sending/receiving anything - used for card initialization
|
||||
|
||||
Example transaction:
|
||||
|
||||
1. read register, loop until _te_ is set
|
||||
1. write command bytes to register (_DW_ | data)
|
||||
1. write _Cx_|_CF_ to register
|
||||
1. read register, loop until _ra_ is set
|
||||
1. process data byte
|
||||
1. write _DR_ to register
|
||||
1. repeat last three steps until complete response has been read
|
||||
1. wait a bit/send a few more $FF bytes
|
||||
1. disable transceiver, write _CW_ to register (Cx = 0)
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue