Published using Google Docs
Alcor Micro AU6601 regs
Updated automatically every 5 minutes

Driver should ignore all interrupts before some operation is finnisched

0x00 - ulong

unkown register. always read 0x0. Write some addresses higer then 0x800.0000

0x05 - ushort (write only)

value = 0 or 1; or block? count + 1 (each 4096byte). max 0xffff. dma? scatter-gather DMA?

NOTE: Я смотрю в sdhci используется ADMA, где по определённому адресу список sg блоков.

0x08 - ulong (read/write)

looks like fifo in and out

0x0C - uchar (write only)

if ADMA_Enable then value=0x10, else value=0x0

0x10 - ulong (write only)

value= physical dma address. not suooprted on au6601?

0x23 - uchar (write only)

value = some value (bitfield) | 0x40

command

0x24 - ulong (write only)

used only together with 0x23

value = some value with endian conversation.

command parametr

0x30 - ulong (read only)

regs 0x30 - 0x40, some kind of buffer. Depending on flag, should be read 0x30 only, or complete 0x30-0x3f range.

value = some value with endian conversation.

0x51 - uchar (write only)

led mode. know values: 0x3; (0x4 | 1); (0x8 | 1).

looks like BIT0 should be always set.

0x52 - uchar (wirte only)

if PwrDownCtrl=1 then value = 0x10, else value = 0x0

0x61 - uchar (write only)

LED related, always togled BIT0. Other bits unknown.  0x61 and 0x63 are always set before 0x51

0x63 - uchar (write only)

value = same as 0x61

0x69 - uchar (write only)

value =

ms code

0x6c - ulong (write only)

Size of FIFO to read (max 0x200?) is it working for write too?

value =

0x70 - uchar (read write)

used always with 0x7A, same bit set and remuved at same time on both registers. Only BIT0 and BIT3 are tugled. Toggle state of CMD and VDD pins

value (bitfield) =

0x72 - ushort (write only)

PLL stettings. BIT0 - enable PLL; BIT1 - ExtX2Mode, 6621 realted; BIT4-BIT7 - mult; BIT8-BIT15 - div;

value (bitfield) =

0x74 - ushort (write only)

BIT4-BIT5 - Signal Control; BIT6 - Enable Interrupt delay; BIT7 - ???

value (bitfield)        

0x75 - uchar

part of 0x74. used values 0x1 and 0x8

0x76 - uchar (read write)

value (bitfield) = 0x0 or 0x80

on read, tested bit are 0x1(sd card is present) and 0x8 (?).

pnp code

0x77 - uchar (read only)

used in statement: if (reg_read(0x77) == 0), then disable ASPM. And probably set PM_enable=0

0x79 - uchar (read write)

value (bitfield) = val | 0x80.

after write (val | 0x80), read this register and wait untill val ( 0x1 or 0x8) was unset by HW.

DMA TX? Abbort command?

0x7a - uchar (read write)

used always together with 0x70, only BIT0 or BIT3 togled.

value (bifield) =

0x7b - uchar (write only)

const value = 68

NOTE: uExtPadDrive0

w0x7c - uchar (write only)

const value = 68

NOTE: uExtPadDrive1

0x7d - uchar (write only)

const value = 68

NOTE: uExtPadDrive2 not supported on 6601

0x7f - uchar (read write)

value = wrtie 0x0 or 0x1

after 0x0 ,read and test 0x08

after 0x1, read and test 0x21

silicon revision? if read 0x21, then it is 6621; if not, then it is  6601??

0x81 - uchar (write only)

CMD control register. 0x20 send command. Other bits used to set return size: R1, R2...

value =

0x82 - uchar (write only)

knwo values 0x20 and 0x0. used bewore 0x86 and pll

value =

0x20 - bus width 4

0x00 - bus width 1

0x83 - uchar (write only)

enable FIFO. Configure direction?0x1 - enable FIFO for read.

value (bitfield) = 0x0 or 0x80

0x84 - ushort (read only)

tested: if (reg_read(0x84) & 0x800F)

        if ((reg_read(0x84) & 0x800F) == 0x800F)

BIT15 - CMD

BIT3 - DAT3; 0 - DAT3 is 0; 1 - DAT3 is 1;

BIT2 - DAT2

BIT1 - DAT1

BIT0 - DAT0

0x85 - uchar (write only)

value = 0x0 or 0x1... possible to set 0x7c.

0x86 - uchar (read write)

always used with 0x72, pll settings.

value (bitfield) = val | 0xc0; val & 0x3f; val & 0xf0

0x90 - ulong (read write)

IRQ status 0x40 - card removed; 0x80 - card inserted; 0x20 - data in FIFO start; 0x2 data in FIFO, end.

0x94 - ulong (write only).

value: 0x0 or 0x7F01FB

NOTE: watchdog?

0xA1 - uchar (read write)

write value = 0x1 or 0x3

read and test : if (reg_read(0xa1) == 0x3)

0xA2 - uchar (write only)

value = val + 16

NOTE: size?

0xA3 - uchar (write only)

value (bitfield) = depends on val for 0xA2

0xB0 - ulong (read write)

value =

0xB4 - ulong