You are on page 1of 54

使用Cypress

Cypress FX2LP晶片
FX2LP
國立雲林科技大學 機械工程所 嵌入式控制實驗室
蔡宗廷
2010/03/31
Introduction
 在之前介紹了USB 的原理與介紹,在專
題中選用了EZ-USB FX2LP的MCU做為設
計USB 周邊裝置的核心元件。
半導體公司特別針對
 Cypress半導體公司特別針對USB 2.0 高速
模式的高頻寬,推出了EZ-USB
FX2&FX2LP 晶片組(LP為LOW POWER
版本)。
目錄
 EZ-USB FX2LP 晶片組特性
 EZ-USB FX2LP CPU 特性
 FX2LP KIT 軟體發展工具
 硬體發展工具
 存取端點緩衝區
 CPU配置端點
 重新裝置列舉
 Endpoint 0 Control Transfers
 韌體架構
 Bulk transactions (巨量傳輸)
EZ-USB FX2LP 晶片組特性
EZ-USB FX2LP 系列晶片可以使用RAM
DOWN LOAD 韌體允許無限的擴充及更新。


 FX2LP 採用SIE(Serial Interface Engine)可以


處理USB 傳輸上硬體大部分協定。
 具有雙重、三重與四重緩衝區FIFO以提供給
480Mbps 傳輸速率。
 四個介面FIFO 能以內部或是外部時脈所驅
動。使用高速傳輸時FIFO 經由端點直接送
出,CPU只負責配置端點。
EZ-USB FX2LP 晶片組特性
 SIE(Serial Interface Engine)執行了串列資
料的解碼及編碼,以及錯誤糾正、位元填
塞與USB所需的信號準位,最後再從USB
週邊介面傳送與接收資料。
EZ-USB FX2LP 晶片組特性
 在一般以FX2LP 為主的USB 周邊裝置中,
CPU具有雙重角色。
 透過控制端點(EP0)來服務PC的要求,實現
USB 協定。
 做為一般泛用目的的系統,僅具一般微處理
機的功能,如果使用高速模式CPU只需規畫
FIFO及端點的介面。
EZ-USB FX2LP 晶片組特性
 FX2LP 晶片Logic Block Diagram
EZ-USB FX2LP 晶片組特性
 FX2LP Endpoint RAM
 3x64bytes (EP0、1)
 8x512bytes (EP2、4、6、8)
EZ-USB FX2LP 晶片組特性
 CY7C68013A-128 TQFP 接腳
EZ-USB FX2LP CPU 特性
 FX2LP CPU 使用標準8051指令集,且
FX2LP CPU 指令所執行的速度比標準型
的8051更快了許多。
 省略無用的匯流排週期,一個指令週期僅
需四個時脈,相較於標準型8051快了三倍
速度。
EZ-USB FX2LP CPU 特性
 第二個資料指標器。
 第二個全雙工串列埠(USART) 。
 第三個16-Bit計時器(TIMER2) 。
 具備無多工16-Bit位置匯流排的高速外部
記憶體介面。
 8個額外新增的中斷(INT2~INT6、
WAKEUP、T2與USART1) 。
EZ-USB FX2LP CPU 特性
為了處理快速/慢速RAM 的週邊時序,提供
了可變時序長度的MOVX 指令。


 2個自動指標器(自動遞增資料指標器)。
 向量式的USB與FIFO/GPIF中斷。
 115K/230K USART的鮑率時序操作。
 3總喚醒來源的睡眠模式。
可執行在100或是400KHz時序的I2C相容匯
流排控制器。

EZ-USB FX2LP CPU 特性
 FX2規格的SFR。
執行USB控制傳輸時,可針對SETUP與DATA部
分提供個別的緩衝區。


針對SETUP資料所設計的硬體指標器加上邏
輯特性來自動完整地處理控制傳輸。


 12、24與48MHz的CPU時脈選擇。
 中斷點的功能
 I/O埠C讀取與寫入閃控訊號。
EZ-USB FX2LP CPU 特性
FX2 CPU 週邊邏輯電路可透過一組位置0xE400~0xFFFF 之
間的記憶體對映射暫存器來控制。


1. GPIF波形描述器表格
2. 泛用的配置
3. 端點的配置
4. 中斷
5. 輸出/輸入
6. USB 控制
7. 端點操作
8. GPIF/FIFO
9. 端點緩衝區
FX2LP KIT 軟體發展工具
 FX2LP KIT 可以從CYPRESS 網站下載,
型號為SETUP_FX2LP_DVK_1004.exe
 http://www.cypress.com/?rID=14321

CYPRESS提供
的程式範例

USB韌體所需
要的檔案
FX2LP KIT 軟體發展工具
 使用發展工具接上FX2LP時
可以看到FX2LP的VID與PID
如果FX2LP有規畫端點下面
欄位會秀出端點數字及傳輸.
量。
FX2LP KIT 軟體發展工具
選擇Download把程
式load到FX2LP晶
片裡面
FX2LP KIT 軟體發展工具
 Get Dev 取得裝置描述元
 Get Conf 取得配置描述元
 Get Pipes 取得管線/端點(Endpoint)配置資訊
 Get Strings 取得字串描述元
 Download 下載程式至FX2LP RAM
 Re-load 重置USB埠標準命令
 Lg EEPROM 下載I2C程式至EEPROM
 URB Star 取得最近USB錯誤的報告內容
 HOLD 將FX2LP CPU重置進入”HOLD”狀態
 RUN 將FX2LP CPU重置進入”RUN”狀態
FX2LP KIT 軟體發展工具

 Bulk Trans 巨量傳輸


 選擇端點後可指定傳送量以及傳送數值
FX2LP KIT 軟體發展工具
將選擇端點2由電
腦送出512筆0x05
的資料給FX2晶片
硬體發展工具
硬體發展工具
 MAX232電路
硬體發展工具
 The device
consists of an 8-bit
quasi-bidirectional
port and an
I2C-bus interface
硬體發展工具
 I2C EEPROM電路
 24LC32為32K的ROM
硬體發展工具
 MAX115
 2x4通道,12Bit ADC
 2µs Conversion Time per Channel
 Throughput: 390ksps (1 Channel)
 218ksps (2 Channels)
 152ksps (3 Channels)
 116ksps (4 Channels)
存取端點緩衝區
PC主機是透過端點緩衝區與FX2LP進行
資料交換的。


 為了能夠跟上高速480Mbps,其透過FIFO
來讀寫資料無須CPU的介入參與。
 FX2的緩衝點區可劃分為大容量與小容量
兩組。其中EP0、EP1為小容量端點僅有
64Bytes 且只能透過CPU存取因此不能直
接連接外部邏輯電路(FIFO)。
存取端點緩衝區
EP2、EP4、EP6和EP8則屬於大容量可以
配置端點已符合USB2.0高頻寬的要求。


 儘管大緩衝區端點資料通常都是由FIFO
介面所控制,必要時CPU還是可以存取些
大端點緩衝區。
 這種大容量與小容量端點並存設計方式是
為了因應高速傳輸的需求,且考慮到需與
USB1.1相容的全速傳輸規格所設計。
存取端點緩衝區
 FX2LP結構為高速傳輸做了最佳化設計
 FX2LP使用數量較少的大容量端點緩衝區來
取代數量較多的小容量端點緩衝區。
 FX2LP為大容量EP2、4、6、8提供了2、3與4
倍緩衝功能。
 CPU不需參與高頻寬的資料傳輸。是由
FX2LP整體的端點/介面FIFO來直接以USB2.0
速率搬移資料進出晶片組無需CPU干預
存取端點緩衝區
 USB在1.1與2.0規格所允許的最大封包大
小是不同的。
最大封包大小
傳輸類型
USB1.1 USB2.0

控制傳輸 8、16、32、64 64

巨量傳輸 8、16、32、64 512

中斷傳輸 1-64 1-1024

等時傳輸 1-1023 1-1024


存取端點緩衝區
 儘管EP2、4、6、8緩衝區在實體上是比
較大的,但當FX2執行全速模式時仍可以
小緩衝區的方式來呈現應用。
 高速模式時緩衝區
的配置及應運如圖
CPU配置端點
 EP1OUTCFG、EP1INCFG的SFR配置
B7 B6 B5 B4 B3 B2 B1 b0
VALID 0 TYPE1 TYPE0 0 0 0 0
R/W R R/W R/W 0 0 0 0
1 0 1 0 0 0 0 0

 Bit 7 VALID 啟動端點 TYPE1 TYPE0 端點型態

 Bit 5-4 TYPE1:0 端點型態 0 0 無效


0 1 無效
1 0 巨量(預設)
1 1 中斷
CPU配置端點
 EP2、6 CFG
B7 B6 B5 B4 B3 B2 B1 b0
VALID DIR TYPE1 TYPE0 SIZE 0 BUF1 BUF0
R/W R/W R/W R/W R/W R R/W R/W
1 0/1 1 0 0 0 1 0

 EP4、EP8 CFG
B7 B6 B5 B4 B3 B2 B1 b0
VALID DIR TYPE1 TYPE0 0 0 0 0
R/W R/W R/W R/W R R R R
1 0/1 1 0 0 0 0 0
CPU配置端點
 VALID
 有效端點預設為1,而無效端點則不會回應主機的
IN 或OUT 執照封包。
 TYPE
 TYPE1:0設定端點類型
 00=無效設定
 01=等時設定
 10=巨量設定(預設)
 11=中斷
CPU配置端點
 DIR
 1=IN
 0=OUT
 BUF1:0
 僅對EP2、6有效,控制緩衝區深度
 00=四倍緩衝區
 01=無效設定
 10=兩倍緩衝區(預設)
 11=三倍緩衝區
 SIZE
 0=512 Bytes
 1=1024 Bytes
CPU配置端點
緩衝區深度(Buffering)是指端點中可用RAM
區塊的大小值。


 以兩倍緩衝區來說USB 可以填滿或是清空一
個端點,同時來自同一端點的另一個封包可
以從外部介面或是CPU來清空或是填滿緩衝
區。
 透過這種技術可以節省USB 與外部邏輯電路
或是介面互相等待的時間,以提升整體執行
效能達到最大傳輸率。
重新裝置列舉
 FX2LP是以軟體為主的架構,其FX2LP程
式與資料是存放在內部RAM中,且PC主
機可透過USB匯流排將程式碼與資料載入。
 當FX2LP載入韌體程式時USB內核將會執
當 載入韌體程式時 內核將會執
行裝置列舉,並跳離重置狀態開始執行裝
置的程式碼。
重新裝置列舉
PC主機會下載載入器
的驅動程式,其用來
PC主機辨識到裝置 從軟體檔案程式將載
連接上,開始執行 入器的認體程式與描
裝置列舉的程序 述元載入至裝置中

主機
PC主機

周邊裝置

FX2LP內核提供裝置
描述元以用來確認
載入器的驅動程式
重新裝置列舉
PC主機會下載載入器
PC主機辨識到裝置 的驅動程式,其用來
連接上,開始執行 從軟體檔案程式將載 PC主機再一次裝置
入器的認體程式與描 列舉,載入裝置驅
裝置列舉的程序
述元載入至裝置中 動程式
主機
PC主機

周邊裝置
FX2LP內核提供裝置 最終USB裝置。
描述元以用來確認 The Magic FX2 CPU會服務USB
載入器的驅動程式 Happens 以及提供裝置的功

重新裝置列舉
 裝置列舉步驟
1. PC主機送出設定執照封包以及其後所跟隨的資
料封包至位置0(裝置封包內放置取得裝置描述
元的標準要求),用來取得裝置的裝置描述元。
2. USB微處理機將此標準要求解碼,並且從它的程
式記憶體(ROM表格)中取出裝置描述元。
3. PC主機執行控制讀取的傳輸序列,此時USB微處
理機將會透過USB匯流排送出裝置描述元並做出
相對應的動作。
重新裝置列舉
4. 在收到裝置描述元後,PC主機會送出設定執
照封包以及其後所跟隨的資料封包至位置
0(資料封包內放置設定裝置位置的標準要
求),以設定一個新的USB位置至裝置上。
微處理機再完成 無資料 控制傳輸後,
5. USB微處理機再完成”無資料”控制傳輸後,
將會儲存新的位置於它的裝置位置的暫存器
內。
6. PC主機設定一個新的USB位置給裝置,並針
對裝置描述元送出一個取得描述元要求。
重新裝置列舉
7. USB微處理機將此要求解碼,並且從程式記憶體
(ROM表格)中取出完整的裝置描述元。
8. PC主機執行控制型讀取的工作,此時USB微處理
機將會以USB匯流排送出裝置描述元。
9. PC主機對USB微處理機產生控制讀取的工作,以
讀取裝置的配置與各種描述元。
10. USB微處理機從它的程式記憶體(ROM表格)中取
出相對的配置與各種描述元。
11. 當PC主機收到所有的描述元後就完成了裝置列
舉的所有步驟。
重新裝置列舉
 可以將11個步驟簡化為五個步驟
1. 使用預設的位置0取的裝置描述元。
 控制型讀取
2. 設定裝置的新位址。
 無資料控制
3. 使用新位址取得裝置描述元。
 控制型讀取
4. 取得配置描述元。
 控制型讀取
5. 設定裝置描述元。
 無資料控制
Endpoint 0 Control Transfers
 EP0是FX2LP晶片組上唯一的控制端點,
雖然控制端點是雙向的,但是在FX2晶片
組上提供了一個64 Bytes 緩衝區(EP0BUF)
共用輸入與輸出的資料,而在控制傳輸的
資料階層,韌體處理這些緩衝區就如同巨
量端點緩衝區一樣。
Endpoint 0 Control Transfers
Endpoint 0 Control Transfers
 各種標準裝置要求與各描述元之間關係
韌體架構
 使用Cypress的FX2LP晶片組來發展時使
用提供的韌體架構可以簡化韌體程式的撰
寫,並且加速USB週邊裝置的發展。
 針對使用者而言,韌體架構可以利用韌體
程式來實現FX2LP晶片組的初始設定,
USB標準裝置要求的處理,以及USB閒置
模式的電源管理服務。
韌體架構
 Cypress公司提供副函式鉤子(function
hooks)與範例程式來協助我們加速處理這個
步驟。
 相關函式庫放置在C:\Cypress\USB\Target
 INC:FX2含括檔,如FX2.H與FX2REGS.H等檔案
 LIB:FX2函式庫的原始檔與物件檔,如EZUSB.LIB
檔案
 FW:建構韌體架構程式的原始檔與物件檔,如FW.C
韌體架構
韌體架構實現了非常簡單且容易的裝置在程
式起始時韌體架構會執行下列步驟:


1. 設定所有的內部變數,也即是設定其初始值。
2. 呼叫使用者的初始設定函式 TD_Init() 等待返
回後韌體架構就會設定USB介面成為未配置的狀
態,並且致能中斷。
3. 在一秒的時間間隔內開始重新列舉裝置,並直
到SETUP執照封包接收到端點0為止。
4. 一但SETUP執照封包被偵測到後,韌體架構就會
啟始的工作分配器。
韌體架構
 工作分配器會依下列順序重複執行下列工作:
1. 呼叫使用者函數:TD_poll() 如果沒有控制傳輸
執行的話就會一直重複這個副程式。
2. 決定是否標準裝置要求是未定的,如果已決定
的話將會剖析所收到的命令要求,並緊接著回
應此要求。
3. 決定是否USB內核已經回報USB終止事件。如果
是的話就會呼叫使用者函式TD_Suspend()。如
果未偵測到的話就會把微處理器切入中止模式。
Bulk transactions (巨量傳輸)
 假設將220 Bytes資料透過EP1IN端點傳送到
PC主機中。由於EP1最大封包為64Bytes此時
CPU會將220Bytes資料依序分為64、64、64、
28共四次傳輸出去
 FX2載入第一個64Bytes到EP1INBUF暫存器後
會將64數值載入EP1INBC暫存器中,而寫入
這些位元組計數暫存器的動作將會命令USB
內核透過傳輸緩衝區內的64Bytes資料來回
應下一次PC主機所送出的IN執照封包。
Bulk transactions (巨量傳輸)
 範例BULKLOOP
 EP1OUTCFG = 0xA0;
EP1INCFG = 0xA0;
SYNCDELAY; // see TRM section 15.14
EP2CFG = 0xA2;
SYNCDELAY;
EP4CFG = 0xA0;
SYNCDELAY;
EP6CFG = 0xE2;
SYNCDELAY;

所有端點都是有效,端點皆為巨量傳輸,
EP8CFG = 0xE0;


EP2/4為OUT,EP6/8則為IN傳輸,EP2468皆
為雙緩衝區
Bulk transactions (巨量傳輸)
 SYNCDELAY;
EP2BCL = 0x80; // arm EP2OUT by writing byte count w/skip.
SYNCDELAY;
EP2BCL = 0x80;
SYNCDELAY;
EP4BCL = 0x80; // arm EP4OUT by writing byte count w/skip.
SYNCDELAY;
EP4BCL = 0x80; // enable dual autopointer feature

端點再使用前皆未配置,因此首先填入
AUTOPTRSETUP |= 0x01;

OUT端點再使用前皆未配置,因此首先填入
至位元組暫存器,EP2、EP4為雙緩衝需以假


數值填入兩次。
 AUTOPTRSETUP |= 0x01;致能雙自動指標器
特性
Bulk transactions (巨量傳輸)
if(!(EP2468STAT & bmEP2EMPTY))
{ // check EP2 EMPTY(busy) bit in EP2468STAT (SFR), core set's this bit when FIFO is empty
if(!(EP2468STAT & bmEP6FULL))
{ // check EP6 FULL(busy) bit in EP2468STAT (SFR), core set's this bit when FIFO is full
APTR1H = MSB( &EP2FIFOBUF );
APTR1L = LSB( &EP2FIFOBUF );
AUTOPTRH2 = MSB( &EP6FIFOBUF );
AUTOPTRL2 = LSB( &EP6FIFOBUF );
count = (EP2BCH << 8) + EP2BCL;
// loop EP2OUT buffer data to EP6IN
for( i = 0x0000; i < count; i++ )
{
// setup to transfer EP2OUT buffer to EP6IN buffer using AUTOPOINTER(s)
EXTAUTODAT2 = EXTAUTODAT1;
}
EP6BCH = EP2BCH;
SYNCDELAY;
EP6BCL = EP2BCL; // arm EP6IN
SYNCDELAY;
EP2BCL = 0x80; // re(arm) EP2OUT
}
}
 ~E~N~D~

You might also like