
–19–
REV. 0
ADSP-2192M
write the address to be written to the USB Register I/O Address 
register. Bit 15 of the USB Register I/O Address register starts 
the transaction and Bit 14 is set to one to indicate a WRITE.
USB REGIO (register write) is a three-stage control transfer with 
an OUT data stage. Stage 1 is the SETUP stage, stage 2 is the 
data stage involving the OUT packet, and stage 3 is the status 
stage. See 
Table 19
 for details about the USB REGIO (register 
write) fields.
USB REGIO (Read)
Address 15–15 = 1 indicates a read to the MCU register space; 
Address 15–15 = 0 indicates a read to the DSP register space. 
When accessing DSP register space, the MCU must write the 
address to be read to the USB Register I/O Address register.
Bit 15 of the USB Register I/O Address register starts the trans-
action, and Bit 14 is set to zero to indicate a READ. The data 
read will be placed into the USB Register I/O Data register.
USB REGIO (register read) is a three-stage control transfer with 
an IN data stage. Stage 1 is the SETUP stage, stage 2 is the data 
stage involving the IN packet, and stage 3 is the status stage. See 
Table 20
 for details about the USB REGIO (register read) fields.
DSP Code Download
Because EP0 has a max packet size of only eight, downloading 
DSP code on EP0 can be inefficient when operating on a UHCI 
controller that allows only a fixed quantity of control transactions 
per frame. Therefore, to gain better throughput for code down-
load, downloading of DSP code involves synchronizing a control 
SETUP command on EP0 with BULK OUT commands on 
endpoints 1, 2, or 3. Each endpoint has an associated DSP down-
load address that is set by using USB REGIO (write) command.
Because three possible interfaces are supported, each interface 
has its own DSP download address and uses its own BULK pipe 
to download code. The driver for each interface must set the 
download address before beginning to use the BULK pipe to 
download DSP code. The download address will auto-increment 
as each byte of data is sent on the BULK pipe to the DSP.
DSP instructions are three bytes long, and USB BULK pipes 
have even-number packet sizes. The instructions to be down-
loaded must be formatted into four-byte groups with the least 
significant byte always zero. The USB interface strips off the least 
significant byte and properly formats the DSP instruction before 
writing it into the program memory. For example, to write the 
three-byte opcode 0x400000 to DSP program memory, the 
driver sends 0x40000000 down the BULK pipe.
The following example illustrates the proper order of commands 
and synchronizing that the driver must follow.
1. Device enumerates with two interfaces. Each interface 
has the capability to download DSP code and can initiate 
at any time.
2. The driver for interface 1 begins code download by 
sending the USB REGIO (write) command with the 
starting download address. The driver must wait for this 
command to finish before starting code download.
3. The driver for interface 2 begins code download by 
sending the USB REGIO (write) command with the 
starting download address. The driver must wait for this 
command to finish before starting code download.
4. Each driver now streams the code to be downloaded to 
the DSP: driver 1 onto BULK EP1 for interface 1, and 
driver 2 onto BULK EP2 for interface 2. The code is 
written to the DSP in 3-byte instructions starting at the 
Table 18. USB MCUCODE (Code Download) 
Offset
Field
Size
Value
Description
0
bmRequest
1
0x40
Vendor Request, 
OUT
USB 
MCUCODE
Address 7–0
Address 15–8
1
bRequest
1
0xA1
2
3
4
5
6
wValue (L)
wValue (H)
wIndex (L)
wIndex (H)
wLength (L)
1
1
1
1
1
XXX
XXX
0x00
0x00
0xXX
1
Length = XX 
bytes
Length = YY 
bytes
7
wLength (H)
1
0xYY
2
1
XX is user-specified.
2
YY is user-specified.
Table 19. USB REGIO (Register Write) 
Offset
Field
Size
Value
Description
0
bmRequest
1
0x40
Vendor Request, 
OUT
USB REGIO
Address 7–0
Address 15–8
1
2
3
4
5
6
bRequest
wValue (L)
wValue (H)
wIndex (L)
wIndex (H)
wLength (L)
1
1
1
1
1
1
0xA0
XXX
XXX
0x00
0x00
0x02
Length = 
02 bytes
7
wLength (H)
1
0x00
Table 20. USB REGIO (Register Read) 
Offset
Field
Size
Value
Description
0
bmRequest
1
0xC0
Vendor Request, 
IN
USB REGIO
Address 7–0
Address 15–8
1
2
3
4
5
6
bRequest
wValue (L)
wValue (H)
wIndex (L)
wIndex (H)
wLength (L)
1
1
1
1
1
1
0xA0
XXX
XXX
0x00
0x00
0x02
Length = 
02 bytes
7
wLength (H)
1
0x00