1.12.2007

more on ISP1582

Datasheet上沒說的...
  • INT pin 腳如果一直是Low,chip 的interrupt 無法動作,導致InterruptConfigure Register 無法初始話 (reset value 變成0,而不是 datasheet 所說的0xFC)。同時也無法寫入。
  • Scratch Register 的寫入需要一些時間才會update。所以write後馬上read會不成功(尚未update)。
  • 雖然chip id 和scratch read/write 都OK了,其他register 還是有可能access error ,最"有名"的案例是Data register,每次讀出都是同一個value。好像不會作auto increatement。
    --這樣就要修改access time。

4 則留言:

匿名 提到...

版主大哥,在下这几天也在做ISP1583,遇到了一个超奇怪的问题,想请教一下。用一个32位的CPU来控制ISP1583,采用的是普通PIO模式,没有用DMA,51风格。在初始化addr,mode,int_cfg,int_enable等寄存器后,再初始化了各个endpoint相关的寄存器,然后读中断状态寄存器,如您前面文章中所述,经过了bus reset,hs_status,进入到了ep0setup状态,这时设置endpoint index寄存器为EP0SETUP,然后从Buffer Length寄存器中读数据长度为8bytes,从data port寄存器中读数据,读出来的数据为80 06 00 01 00 00 00 00,因为wlength的值不对,导致后续的处理都无法正常操作,请问您遇到过类似问题吗?能否提点一下,谢谢!可以确认的是CPU与ISP1583的通信是正确的。

checko 提到...

嗯,我沒有遇過FIFO只能讀到一半的情形,如果說timing不對,fifo counter是不會自動增加到下一個。這是沒錯。你要不要試試將bus timing調得慢一些... 你用的51 是跑多快呀 ? 應該不是一般的51吧..

其實我也沒作完,做到SETUP0 get descriptor - configuration descriptor 兩次後,就停住了,也是request length 的問題...但是我的是FF,不是0。

匿名 提到...

版主大哥,你好!上次说的ISP1583的问题已经解决,我的USB已经可以正常工作了。上次出现问题,主要是因为CPU的管脚参数没有设对,OE脚在读的时候也会有信号,导致读取了两次四个字节后,被写信号破坏了FIFO,改了就可以了。后来又遇到因为晶振频率不准导致通讯不正常的问题。写在这里让用这颗IC的朋友都知道一下,不要犯我这种低级错误。

checko 提到...

原來是這樣呀。
你真好心,願意將經驗告訴大家。
祝你一切順利。