1 Assumptions made on source code:
2 * looks like USB block is [FUSB200](http://www.faraday-tech.com/techDocument/FUSB200_ProductBrief_v1_2.pdf).
3 * According to docs FUSB200 has 15 endpoints, but according to the source 10.
5 # 0x00 ZM_MAIN_CTRL_OFFSET
7 * BIT6 - 1 = HighSpeed is set (read only?)
11 * BIT2 - 1 = enable global Int
13 * BIT0 - 1 = set Remote Wake Up;
15 # 0x01 ZM_DEVICE_ADDRESS_OFFSET
16 * BIT7 - usb config? (r/w)
26 * BIT0 - 1 ?? set on usb 2.0 init
28 # 0x08 ZM_PHY_TEST_SELECT_OFFSET
38 According to FUSB200 doc:
39 DM(D-) DP(D+) Description
44 0: Control PHY to turn off 1.5K Ohm pull-up resistor
45 1: Control PHY to turn on 1.5K Ohm pull-up resistor
49 # 0x0A ZM_VDR_SPECIFIC_MODE_OFFSET
51 # 0x0B ZM_CX_CONFIG_STATUS_OFFSET
54 * BIT5 - indicator that frame was transmitted.
56 * BIT3 - set to drom the fram?
57 * BIT2 - set CX_STL to stall Endpoint0 & will also clear FIFO0
59 * BIT0 - set CX_DONE to indicate the transmistion of control frame
61 # 0x0C ZM_EP0_DATA_OFFSET
62 * Write 32bit data to fifo
64 # 0x11 ZM_INTR_MASK_BYTE_0_OFFSET
65 Theoretically INTR_MASK_BYTE should control INTR_SOURCE. Is it correct?
67 # 0x12 ZM_INTR_MASK_BYTE_1_OFFSET
70 # 0x13 ZM_INTR_MASK_BYTE_2_OFFSET
73 # 0x14 ZM_INTR_MASK_BYTE_3_OFFSET
76 # 0x15 ZM_INTR_MASK_BYTE_4_OFFSET
78 #define mUSB_REG_OUT_INT_ENABLE() USB_BYTE_REG_WRITE(ZM_INTR_MASK_BYTE_4_OFFSET, \
79 USB_BYTE_REG_READ(ZM_INTR_MASK_BYTE_4_OFFSET)&0x3f)
80 #define mUSB_REG_OUT_INT_DISABLE() USB_BYTE_REG_WRITE(ZM_INTR_MASK_BYTE_4_OFFSET, \
81 USB_BYTE_REG_READ(ZM_INTR_MASK_BYTE_4_OFFSET)&0xc0)
83 # 0x16 ZM_INTR_MASK_BYTE_5_OFFSET
86 # 0x17 ZM_INTR_MASK_BYTE_6_OFFSET
89 #define mUSB_STATUS_IN_INT_ENABLE() USB_BYTE_REG_WRITE(ZM_INTR_MASK_BYTE_6_OFFSET, \
90 USB_BYTE_REG_READ(ZM_INTR_MASK_BYTE_6_OFFSET)&0xbf)
91 #define mUSB_STATUS_IN_INT_DISABLE() USB_BYTE_REG_WRITE(ZM_INTR_MASK_BYTE_6_OFFSET, \
92 USB_BYTE_REG_READ(ZM_INTR_MASK_BYTE_6_OFFSET)|0xc0)
94 # 0x18 ZM_INTR_MASK_BYTE_7_OFFSET
96 # 0x20 ZM_INTR_GROUP_OFFSET
100 * BIT4 - group INTR 4
101 * BIT3 - group INTR 3
102 * BIT2 - group INTR 2
103 * BIT1 - group INTR 1
104 * BIT0 - group INTR 0
105 These bits indicate if fallowing groups got some interrupt.
107 # 0x21 ZM_INTR_SOURCE_0_OFFSET
108 * BIT7 - abort interrupt? should be cleared first?
111 * BIT4 - ep0 CMD_FAIL
113 * BIT2 - USB EP0 OUT/rx interrupt
114 * BIT1 - USB EP0 IN/tx interrupt
117 # 0x22 ZM_INTR_SOURCE_1_OFFSET
118 # 0x23 ZM_INTR_SOURCE_2_OFFSET
119 # 0x24 ZM_INTR_SOURCE_3_OFFSET
120 # 0x25 ZM_INTR_SOURCE_4_OFFSET
121 * BIT7 - End of data.
122 * BIT6 - vUsb_Reg_Out(). Pending data in fifo for EP4. We need to read it out.
123 Comments: we can read only 64bytes per time. If pending data is less then 64bytes or it is end of packet, then BIT6 and BIT7 will be set. If not, then only BIT6 is set.
125 # 0x26 ZM_INTR_SOURCE_5_OFFSET
126 these endpoints are handled by DMA
128 # 0x27 ZM_INTR_SOURCE_6_OFFSET
129 * BIT6 - vUsb_Status_In()?
131 # 0x28 ZM_INTR_SOURCE_7_OFFSET
138 * BIT1 - USB reset interrupt.
141 # 0x3E ZM_EP_IN_MAX_SIZE_LOW_OFFSET
143 # 0x3F ZM_EP_IN_MAX_SIZE_HIGH_OFFSET
147 * BIT4 - mUsbEPinRsTgSet
148 * BIT3 - mUsbEPinStallSet
152 These offset + 2 Byte step for each endpoint.
153 For example EP0 = +0x00; EP1 = +0x02; or offset+(EPn << 1). In these address space will fit 15 endpoints.
155 # 0x5E ZM_EP_OUT_MAX_SIZE_LOW_OFFSET
157 # 0x5F ZM_EP_OUT_MAX_SIZE_HIGH_OFFSET
161 * BIT4 - mUsbEPoutRsTgSet
162 * BIT3 - mUsbEPoutStallSet
166 These offset + 2 Byte step for each endpoint.
167 For example EP0 = +0x00; EP1 = +0x02; or offset+(EPn << 1). In these address space will fit 15 endpoints.
169 # 0xAE ZM_EP3_BYTE_COUNT_HIGH_OFFSET
171 comments: after sending data from target to host, set BIT3
173 # 0xAF ZM_EP4_BYTE_COUNT_HIGH_OFFSET
174 BIT4 - 1 - reset fifo; 0 - disable reset?
175 comments: probably compatible with ZM_EP3_BYTE_COUNT_HIGH_OFFSET.
176 **These name reg do not fit to pattern!!!** Compare with 0x3e, 0x3f and 0x5e, 0x5f.
177 If we have 0x3e, 0x3f and 0x5e, 0x5f, why do we need this register?
179 # 0xBE ZM_EP3_BYTE_COUNT_LOW_OFFSET
180 size of data in fifo buffer? never used?
182 # 0xBF ZM_EP4_BYTE_COUNT_LOW_OFFSET
183 size of data in fifo buffer
185 # 0xF8 ZM_EP3_DATA_OFFSET
188 # 0xFC ZM_EP4_DATA_OFFSET
191 # 0x100 what is here?
192 **we miss 8 bytes here**
194 # 0x108 ZM_SOC_USB_MODE_CTRL_OFFSET
195 BIT10 - 1 - enable MP (EP6) downstream stream mode
196 BIT9 - 1 - enable MP (EP6) downstream DMA mode
197 BIT8 - 1 - enable HP (EP5) downstream DMA mode
198 BIT7 - 1 - enable HP (EP5) downstream stream mode
199 BIT6 - 1 - enable LP downstream stream mode
200 BIT5 - define the host dma buffer size - 4096(00) 8192 (01) 16384(10) 32768(11) bytes
202 BIT3 - 0 - enable upstream stream mode: 1 - enable upstream packed mode;
203 BIT2 - 0 - Set into 64 byte mode (full speed) 1 - Set into 512 byte mode (usb highspeed)
204 BIT1 - 0 - disable upstream dma mode; 1 - enable upstream dma mode
205 BIT0 - 0 - disable LP down stream dma mode; 1 - eanble LP down stream dma mode
207 ryan: 04/01: bit0 could disable lpdn dma, which is good at debugging while async_fifo have problem, we could disable this and check the fifo_rcv_size to see if we have correct at fifo or not
208 LP - lo priotiry; MP - middle priority; HP - High priority;
211 # 0x110 ZM_SOC_USB_MAX_AGGREGATE_OFFSET
212 set stream mode packet buffer critirea
213 0x0 = disable stream mode or 1 packet. So 0x9 is 10 packets?
214 # 0x114 ZM_SOC_USB_TIME_CTRL_OFFSET
215 set stream mode timeout critirea. the unit is 32 USB (30Mhz) clock cycles.