1.03.2007

ISP1582 - Endpoint 0

在 AN10046_5.pdf

Endpoint 0 是Control Endpoint。 不需要 initialize。
因為 Endpoint 0 的Type 是固定的- Control Type。
所以Chip 也設定好。

Endpoint 0 的 buffer size 也是固定的 :64 byte。


所以Endpoint 0 不用作 initialize 和 enable。


其他的Endpoint 都要initialize。而且為了正確規劃buffer,要follow 以下的程序來作:
  1. disable all endpoint IN and OUT
  2. 依序(從前到後,從IN到OUT)依序規劃 endpoint 的 MaxPacketSize。
  3. MaxPacketSize都設定完後,再從頭,依序設定每一個Endpoint (IN and OUT)的 Type。
  4. 依序Enable Endpoint
如果沒有這樣作,ISP 1582 internal RAM 會 " ill partitioned ",會造成 data corruption。

另外要注意DMA的endpoint register,不可以設定和 Endpoint Index register 一樣,否則會也會造成 data corruption。

所以當不使用DMA時,最好把DMA Endpoint Register 設定到不使用(enable)的endpoint上。
即使要用DMA時,也要小心 DMA endpoint register 和 endpoint index register 的值不能相同。
- 必要時,先移開其中一個register的值 -
另一個奇怪的地方

DataSheet 有關 ControlFunction Register 的 CLBUF 說明,是clear RX buffer of the indexed endpoint, TX buffer is not affected.

但是 AN10045,pdf : Clearing an IN buffer 又說要clear IN buffer (TX)。
在IN data stage 拔掉USB Cable會造成下一個stage (也就是重新enumeration )的error。
所以要 設定CLBUF (2次)。

以上是互相衝突的說明。

沒有留言: