[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [usb] Handshake to OUT transaction



Hi Vikas T RAO!!! an thanks!

----- Original Message ----- 
From: "Vikas T Rao " <vikasraot@m... > 
To: <usb@o... > 
Date: Fri, 17 Jan 2003 14:30:26 +0530 
Subject: Re: [usb] Handshake to OUT transaction 

> 
> 
> ** Proprietary ** 
> 
> hi, 
> 
> from ur mail, i feel u r the user(on OS side) of that core. 
> 
> as far as i understand, core functionality might be like below. 
> 
> whenever the FIFO is full, a FIFO full signal(let's say fifo_full) 
> will be active. this signal might be causing an interrupt to the 
> core processor(CPU). upon receivng this interrupt, CPU might be 
> halting it's present operation and responding to this interrupt by 
> jumping to a sub-routine(Interrupt Service Routine). in that ISR, 
> NAK reply instructions might be present. so, u r seeing this NAK as 
> a reply to the last 64byte OUT transaction. "fifo_full" signal will 
> not be active if only 63 bytes are sent. 

thanks for so clear decribing of handshake logic

Before write to EP, EP's FIFO was absolutly empty! fifo_empty signal
was 'Hi' state. While 4time OUT transaction was processed device MCU
not read from FIFO. at end of OUT transactions i hope get 256 bytes in
EP's FIFO and "fifo_full" flag must be Hi. 


> 
> now the question is why it has to NAK? the answer can be as 
> follows. 
> 
> normally cores provide FIFO depth which is greater than their max 
> packet size. here it's 256 though max packet size is 64. it's 
> necessary because core might be slower than the USB speed i.e., 
> core might not have processed the 1st 64 bytes while the next 
> 64bytes arrive. instead of NAKing the 2nd packet, it might 
> retain(since FIFO depth is larger than max packet size) the 2nd one 
> also by ACKing. similarly with 3rd packet also. now when 4rth 
> packet arrives, core might not have finished processing the 1st 
> packet still.

befor 4th OUT transact. EP's FIFO has 64 bytes free to accept max size
(64) packet.

> that's why core might want to take a precautionary 
> measure at this point of time by NAKing. 
> 
> hope u have understood the probable functionality of the core. 


> 
> from the user point of view, u can't do anything if above is the 
> case except that u have to change the core logic according to ur 
> requirements. 


> 
> ...Vikas Rao. 
> 
> >>> Ilja_Alekssev@m...  01/16/03 06:19PM >>> 
> i can't understud this phenomen: 
> 
> my configuration of EndPoint: 
> EP1 -IN Bulk MaxPacket size - 64 
> size of EP1 FIFO 256 byte 
> EP2 -OUT Bulk MaxPacket size - 64 
> size of EP2 FIFO 256 byte 
> 
> when i write OUT in EP2 3 packet with PID sequence DATA0-1-0 core 
> say 
> me with 
> ACK handshake. and all 3 packet (total 64*3 bytes) fit in EP2 FIFO 
> correctly. 
> after that in EP2 FIFO is 64 bytes free space. 
> and when i write OUT to EP2 packet with PID DATA1 (size of packet: 
> 64 
> byte) core 
> say me NAK! But all last 64 byte (from last packet) in EP2 FIFO fit 
> correctly. 
> in write-time(EP2_WE is Hi) of last byte in Last packet EP2_Full is 
> Rise__/--- 
> 
> If i make 3 time write 64 bytes and 1 time 63 byte, core say me 4 
> time 
> ACK and 
> 64*3+63 bytes fit in EP2 FIFO. 
> 
> resume: 
> 256 byte sucessfuly writed to EP2 FIFO but USB core say me NAK to 
> last 
> transaction !  is this right? 
> 
--
To unsubscribe from usb mailing list please visit http://www.opencores.org/mailinglists.shtml