SD/MMC/SDIO Registers: Difference between revisions

Nocash (talk | contribs)
No edit summary
Nocash (talk | contribs)
Line 67: Line 67:
===4004800h/4004A00h - SD_CMD - Command and Response/Data Type (R/W)===
===4004800h/4004A00h - SD_CMD - Command and Response/Data Type (R/W)===
   15    undoc  Unknown/undoc  (read/write-able)
   15    undoc  Unknown/undoc  (read/write-able)
   14    undoc  Security Cmd   (0=Normal, 1=Whatever/Security) (sdio?)
   14    undoc  Security Cmd(0=Normal, 1=Whatever/Security?) (sdio?)
   13    undoc  Data Length    (0=Single Block, 1=Multiple Blocks)
   13    undoc  Data Length    (0=Single Block, 1=Multiple Blocks)
   12    undoc  Data Direction (0=Write, 1=Read)
   12    undoc  Data Direction (0=Write, 1=Read)
   11    NTDT    Data Transfer  (0=No data, 1=With data)
   11    NTDT    Data Transfer  (0=No data, 1=With data)
   10-8  REP2-0  Response Type  (0..2=Unknown/Reserved, 3=None, 4=48bit,
   10-8  REP2-0  Response Type  (0=Auto, 1..2=Unknown/Reserved, 3=None, 4=48bit,
                                 5=48bit+Busy, 6=136bit, 7=48bitOcrWithoutCRC7)
                                 5=48bit+Busy, 6=136bit, 7=48bitOcrWithoutCRC7)
   7-6  CMD1-0  Command Type  (0=CMD, 1=ACMD, 2..3=unknown, maybe GEN WR/RD?)
   7-6  CMD1-0  Command Type  (0=CMD, 1=ACMD, 2..3=unknown, maybe GEN WR/RD?)
   5-0  CIX    Command Index  (0..3Fh, command index)
   5-0  CIX    Command Index  (0..3Fh, command index)
Invalid values can cause ILA error (particulary on setting NTDT for CMD12, or for CMD's Response=None). ILA error will also occur if an old CMD is still busy.<br>
Setting Command Type to "ACMD" is automatically sending an APP_CMD prefix prior to the command number. For Multiple Blocks, the hardware supports automatically sending STOP_TRANSMISSION after the last block.<br>
DSi software is always writing just ZERO to bit11-6 though? Maybe the hardware does automatically know which SD/MMC CMDs and ACMDs have data? Or maybe data is always automatically transferred when receiving a data-startbit, or when writing to data register - and bits like NTDT would be needed only for things like proper data timeout handling?
DSi software is usually setting Response Type to "Auto", which is causing the hardware to use the correct response/data type for standard SD/MMC commands (bit11-13 are ignored/should be zero when using "Auto"; and maybe same for bit14-15?).<br>
One exception is that the DSi firmware isn't using "Auto" for SDIO commands (maybe the hardware isn't aware of them; or it's unable to distinguish between read/write direction of CMD53, which would require examining the command's PARAM bits).<br>
There might be subtle differences between some SD and MMC commands, unknown if/how "Auto" is working in that cases; unknown if there's a SD-or-MMC mode select bit for that purpose in some configuration register.<br>
Invalid values can cause ILA error (particulary on setting NTDT for CMD12, or for CMD's Response=None). ILA error will also occur if an old CMD is still busy.


===4004804h/4004A04h - SD_CMD_PARAM0-1 - Argument (32bit, 2 halfwords) (R/W)===
===4004804h/4004A04h - SD_CMD_PARAM0-1 - Argument (32bit, 2 halfwords) (R/W)===