標籤:
環境配置
開始調試前必須確保電腦已安裝上正確的驅動程式,64位系統在driver中安裝amd64的,32位的系統安裝x86的(我在調試時因為驅動程式沒有選對,真是血的教訓。。。)。對於FTD2XX的晶片,除非使用MPSSE功能,其他情況都使用FTD2XX的驅動,然後使用dll或者配置成com來進行通訊。
建議在調試硬體前用FTDI官方提供的測試程式進行測試。這是C#下的測試程式,http://www.ftdichip.com/Support/SoftwareExamples/CodeExamples/CSharp.htm,建議使用example 3的資料輪迴測試,注意這個測試程式需要把TXD和RXD引腳短接,RTS和CTS引腳短接。因此建議畫板的時候可以留下介面方便測試。如果四個腳都串連FPGA,那也可以用FPGA來扮演連接器的角色。
然後,別忘了還要使用FT_Prog把晶片和Master通訊方式配置成FT1248模式。,這個在hardware specific中PART A的hardware中可以選擇。,並在driver中選擇FTD2XX。需要注意的是,如果只使用了一個FT232H和Master通訊,FT1248匯流排上沒有其他裝置,那麼一般會選上FT1248 setting的Flow ctrl not selected,這樣在非通訊過程是晶片的MIOSIO[0]和MISO才會反應資料緩衝區狀態,在調試過程中如果出現資料發送出去但是板子沒有收到的情況,那麼有一種情況就是電腦的另一個usb也連著一個ft的usb晶片,有可能是程式燒錄器。那就拔掉以後再試試。
FT1248的8bit協議
(一) FT232H在本協議中作為從機與主機進行8bit通訊(或者1bit,2bit,4bit,本文基於8bit)
1. 在8bits通訊中,會用到11根訊號線,雙向資料線[7:0] MIOSIO,Master控制的時鐘線(SCLK)和使能線(SS_N),FT232H控制的MISO
2. FT232H判斷使用的是多少bit通訊是通過檢測SS_N在拉低後的第一個周期內MIOSIO情況(需要注意手冊建議每個MIOSIO都要加上拉電阻,因此晶片預設都是在高電平的),
如果[7:4]MIOSIO中有一個被拉低了,那麼通訊為8bit;
如果[3:2]MIOSIO中有一個被拉低了,那麼通訊為4bit;
如果[1]MIOSIO被拉低了,那麼通訊為2bit,否則就是1bit通訊;
3. 在未進行通訊時,FT232H將會通過MIOSIO[0]和MISO分別反應write buffer和read buffer的狀態,兩個buffer都有1 kBytes的空間:
(a)其中MIOSIO[0]在高電平表示在write buffer中至少還能存放1 byte;
(b)MISO在高電平表示read buffer還有至少1 byte沒有被讀取;
4. 當SS_N變為低電平表示主機正開始一次傳輸,這時首先由主機發送8bit的CMD指令(在第一個時鐘返回延,從機進行採樣),沒有使用到的MIOSIO都拉低。
對於8bit模式, 目前可用的指令包括:
CMD0 = MIOSIO[6]; 0x0 寫輸入到USB緩衝
CMD1 = MIOSIO[5]; 0x1 從USB緩衝讀資料
CMD2 = MIOSIO[3]; 0x2 讀取modem狀態
CMD3 = MIOSIO[0]; 0x3 寫modem狀態
0x4 把write buffer中的資料擦除
5. 在第二個周期開始時,[7:0]MIOSIO的傳輸要轉向,主機的這幾根線進入三態狀態(注意:AN_167手冊上對8bit的這段描述貌似直接複製了4bit的,所以時鐘和位寬都有錯誤)。轉向完後,第三個周期就開始收/發資料了,當然這個時候SS_N都要保持低電平。同時,MISO會使用ACK或NAK來告知是否傳輸成功。
6. 在準備把SS_N拉高來結束傳輸前,必須把MIOSIO置於三態,使得FT232H能通過MIOSIO[0]把write buffer狀態映射出來。
7. MISO的狀態將表示是否在write的時候write buffer滿了,或者在read的時候read buffer空了。如果出現這些異常,MISO將反饋NAK,手冊建議當收到NAK的下一個周期必須SS_N置高停止傳輸,否則之後的read和write都會出問題。
8. 讀寫資料在每個返回延進行採樣。
FT1248開發筆記