版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、p282 - p352,共70頁P282以太網(wǎng)塊是一個AHB主控器連接到AHB矩陣,并訪問內(nèi)部SRAM(IRAM)和連接到外部內(nèi)存控制器的內(nèi)存中以太網(wǎng)數(shù)據(jù),控制、狀態(tài)信息。其他的AHB通信由其他的主控器、來自剩下系統(tǒng)的高效的分離的以太網(wǎng)活動來產(chǎn)生。以太網(wǎng)塊接口在使用MII或RMII協(xié)議的片外以太網(wǎng)PHY和片上MIIM串行總線之間。標記:以太網(wǎng)控制器只在LPC3240和LPC3250芯片上有效。P284以太網(wǎng)塊的組成:主寄存器模塊連接到AHB的DMA接口以太網(wǎng)MAC和附加的RMII適配器發(fā)送路徑接收路徑P313這部分定義了發(fā)送和接收 分散/集合 DMA引擎的描述符格式。每一個以太網(wǎng)幀由一個或多個
2、分片組成。每一個分片對應一個單獨的描述符。對一個單獨的以太網(wǎng)幀,在以太網(wǎng)塊中的DMA管理器分散(接收)和集合(發(fā)送)多個分片。接收描述符和狀態(tài)接收描述符存儲在內(nèi)存數(shù)組中。數(shù)組的基地址存儲在RxDescriptor寄存器中,且4字節(jié)地址邊界對齊。描述符的數(shù)目存儲在RxDescriptorNumber寄存器中,值為真實數(shù)目減1,如:數(shù)組有8個元素,則寄存器的值為7。對應描述符有一個狀態(tài)數(shù)組。對每一個描述符數(shù)組元素,有一個與之聯(lián)系的狀態(tài)數(shù)組的狀態(tài)域。狀態(tài)數(shù)組的基地址存儲在RxStatus寄存器中,且8字節(jié)地址邊界對齊。在操作期間(當接收數(shù)據(jù)路徑使能),RxDescriptor、RxStatus、Rx
3、DescriptorNumber寄存器不能被修改。P314RxConsumeIndex、RxProduceIndex這2個寄存器定義了描述符位置,被硬件和軟件移動。這2個寄存器作為計數(shù)器從0開始,當值達到RxDescriptorNumber寄存器的值時結(jié)束。RxProduceIndex寄存器包含將填充被接收的下一個幀的描述符索引。RxConsumeIndex寄存器被軟件編程,是軟件接收驅(qū)動將處理的下一個描述符索引。當RxProduceIndex = RxConsumeIndex,則接收緩沖區(qū)空。當RxProduceIndex = RxConsumeIndex -1,則接收緩沖區(qū)滿,且新接收的數(shù)
4、據(jù)將產(chǎn)生一個溢出,除非軟件驅(qū)動釋放一個或多個描述符。每一個接收描述符在內(nèi)存中占用2個字(8字節(jié))。每一個狀態(tài)域在內(nèi)存中占用2個字(8字節(jié))。每一個接收描述符包含一個指向存放接收數(shù)據(jù)包的數(shù)據(jù)緩沖區(qū)的指針、一個控制字。包域有一個0地址偏移,控制域有4字節(jié)地址偏移,對應的描述符地址在下表中定義狀態(tài)數(shù)組中的接收狀態(tài)元素的域定義如下表所示P316發(fā)送描述符和狀態(tài)發(fā)送描述符存儲在內(nèi)存的數(shù)組中。發(fā)送描述符數(shù)組的最低地址存放在TxDescriptor寄存器中,必須4字節(jié)地址邊界對齊。數(shù)組中描述符的數(shù)目存儲在TxDescriptorNumber寄存器中,值等于真實的數(shù)目減1。例如:有8個元素,則寄存器的值為7。
5、對應的描述符,有一個狀態(tài)數(shù)組。對描述符數(shù)組的每一個元素,有一個與之聯(lián)系的狀態(tài)數(shù)組的狀態(tài)域。狀態(tài)數(shù)組的基地址存放在TxStatus寄存器中,必須4字節(jié)地址邊界對齊。在操作期間(當發(fā)送數(shù)據(jù)路徑使能),TxDescriptor、TxStatus、TxDescriptorNumber寄存器不能被修改。P317TxConsumeIndex、TxProduceIndex這2個寄存器定義了被硬件和軟件用于移動的描述符位置。這2個寄存器用于計數(shù)器,從0開始,當達到TxDescriptorNumber寄存器的值時結(jié)束。TxProduceIndex寄存器包含將被軟件驅(qū)動填充的下一個描述符的索引。TxConsume
6、Index寄存器包含被硬件發(fā)送的下一個描述符索引。當TxProduceIndex = TxConsumeIndex,,則發(fā)送緩沖區(qū)空。當TxProduceIndex = TxConsumeIndex -1,則發(fā)送緩沖區(qū)滿,且軟件驅(qū)動不能添加新描述符,直到硬件已經(jīng)發(fā)送了一個或多個幀并釋放了描述符。每一個發(fā)送描述符在內(nèi)存中占用2個字(8字節(jié))。每一個狀態(tài)域在內(nèi)存中占用1個字(4字節(jié))。每一個發(fā)送描述符包含一個發(fā)送數(shù)據(jù)包的數(shù)據(jù)緩沖區(qū)指針、一個控制字。包域包含一個0地址偏移,控制域有一個4字節(jié)地址偏移,如下表發(fā)送狀態(tài)包含一個域,如下表P319中斷以太網(wǎng)塊有一個單獨的中斷請求通過中斷控制器輸出到CPU。
7、中斷服務程序必須讀IntStatus寄存器去決定中斷源。所有的中斷狀態(tài)必須用軟件寫IntSet寄存器設置,狀態(tài)用軟件寫IntClear寄存器清除。發(fā)送和接收數(shù)據(jù)路徑只能設置中斷狀態(tài),不能清除狀態(tài)。SoftInt中斷不能被硬件設置,為了測試目的能夠被軟件設置。DMA描述符數(shù)組:以太網(wǎng)塊包含2個DMA管理器,DMA管理器可以使傳輸幀直接從內(nèi)存進入或出來,只需要cpu很少的支持而不需要每一個幀觸發(fā)一次中斷。P320DMA管理器需要存儲在內(nèi)存中的幀描述符數(shù)組和狀態(tài)數(shù)組才能工作。描述符和狀態(tài)作為一個以太網(wǎng)硬件和設備驅(qū)動軟件之間的接口。有一個描述符數(shù)組用于接收幀,有一個描述符數(shù)組用于發(fā)送幀。幀描述符使用緩
8、存,則描述符的內(nèi)存通信和內(nèi)存帶寬的利用率將維持很小。每一個幀描述符包含2個32位域:第1個域為一個指向包含一個幀或一個分片的數(shù)據(jù)緩沖區(qū)的指針,第2個域為對應的幀和分片的控制字。軟件驅(qū)動必須寫描述符數(shù)組和狀態(tài)數(shù)組的基地址到TxDescriptor/RxDescriptor寄存器和TxStatus/RxStatus寄存器中。在每一個數(shù)組中的descriptors/statuses數(shù)目必須被寫到TxDescriptorNumber/RxDescriptorNumber寄存器中。描述符數(shù)組中描述符的數(shù)目對應狀態(tài)數(shù)組中狀態(tài)的數(shù)目。發(fā)送描述符數(shù)組、接收描述符數(shù)組、發(fā)送狀態(tài)數(shù)組必須4字節(jié)地址邊界對齊,接收狀
9、態(tài)數(shù)組必須8字節(jié)地址邊界對齊。描述符的擁有權:設備驅(qū)動軟件和以太網(wǎng)硬件能同時讀和寫描述符數(shù)組,為了產(chǎn)生和消耗描述符。在AHB總線上的仲裁器給了一個DMA硬件的優(yōu)先級,以防止同時發(fā)生請求。一個描述符可以被設備驅(qū)動或以太網(wǎng)硬件“擁有”。只有描述符的擁有者能夠讀寫他的值。典型的使用序列和描述符和狀態(tài)的擁有權如下:一個描述符被擁有并被設備驅(qū)動設置。設備驅(qū)動傳遞“描述符/狀態(tài)”的擁有權給以太網(wǎng)塊,以讀描述符和寫信息到狀態(tài)域。以太網(wǎng)塊傳遞描述符的擁有權到設備驅(qū)動,以使用狀態(tài)信息,并回收利用描述符去給另一個幀使用。軟件必須預先分配內(nèi)存給描述符數(shù)組使用。軟件能夠處理描述符和狀態(tài)的所有權給硬件,通過增加TxPr
10、oduceIndex/RxConsumeIndex寄存器。硬件處理描述符和狀態(tài)給軟件通過更新TxConsumeIndex/ RxProduceIndex寄存器。在處理了一個描述符給接收和發(fā)送DMA硬件后,設備驅(qū)動軟件不能修改描述符或回收描述符通過減少TxProduceIndex/ RxConsumeIndex寄存器的值,因為描述符已經(jīng)被硬件預取了。這樣,設備驅(qū)動軟件必須等待,直到幀已經(jīng)被發(fā)送或設備驅(qū)動軟復位了發(fā)送或接收數(shù)據(jù)路徑,將復位描述符數(shù)組。環(huán)回的次序規(guī)則:當描述符被讀取且狀態(tài)被寫到數(shù)組,這些被操作在環(huán)回的次序規(guī)則中。次序規(guī)則表示當以太網(wǎng)塊完成了讀/寫一個描述符/狀態(tài),則下一個描述符/狀態(tài)
11、,以太網(wǎng)塊會去讀/寫下一個高的相鄰的內(nèi)存地址。環(huán)回表示當以太網(wǎng)塊完成了讀/寫 數(shù)組(最高的內(nèi)存地址)中最后一個描述符/狀態(tài),則下一個描述符/狀態(tài),以太網(wǎng)塊會去讀/寫 數(shù)組中基地址的第一個描述符/狀態(tài)。P321描述符數(shù)組中的滿狀態(tài)和空狀態(tài):描述符數(shù)組可以空、部分滿、全滿。當所有的描述符被生產(chǎn)者擁有時,則一個描述符數(shù)組為空。如果生產(chǎn)者和消費者擁有部分描述符,或兩者都忙于處理這些描述符,則描述符數(shù)組為部分滿。當所有的描述符被消費者擁有,則描述符數(shù)組滿,這樣生產(chǎn)者沒有空間去處理幀。描述符的所有權用消費者索引和生產(chǎn)者索引表明。生產(chǎn)索引是被生產(chǎn)者擁有的數(shù)組中的第一個元素。這也是下一個將被幀的生產(chǎn)者使用的數(shù)
12、組元素的索引。消費索引是被消費者擁有的數(shù)組的第一個元素。這也是下一個被幀的消費者消費的數(shù)組元素的編號。如果消費索引和生產(chǎn)索引相等,則描述符數(shù)組為空且所有的數(shù)組元素被生產(chǎn)者擁有。如果消費索引等于生成索引加1,則數(shù)組為滿且所有的數(shù)組元素被消費者擁有。一個滿的描述符數(shù)組和一個空的描述符數(shù)組,能很容易的區(qū)別滿和空的狀態(tài),通過查看生成索引和消費索引的值。一個數(shù)組必須至少有2個元素能夠表明是一個滿的描述符數(shù)組,即生產(chǎn)索引的值為0,消費索引的值為1。當檢查是否一個描述符數(shù)組是滿的,環(huán)回數(shù)組應該被考慮,這樣生產(chǎn)索引指明數(shù)組中的最后一個元素,消費索引指明數(shù)組中的第一個元素,表示描述符數(shù)組是滿的。當生產(chǎn)索引和消費
13、索引不相等,消費索引不等于生成索引加1,則描述符數(shù)組為部分滿,這時消費者和生產(chǎn)者在描述符數(shù)組中擁有足夠的描述符進行操作。中斷位:描述符有一個中斷位,可以被軟件設置。當以太網(wǎng)塊處理一個描述符并找到這一位設置時,允許觸發(fā)一個中斷通過傳遞在IntStatus寄存器中的RxDoneInt 或 TxDoneInt位到中斷輸出引腳。如果中斷位在描述符中沒有被設置,則RxDoneInt 或TxDoneInt不能被設置,且沒有中斷被觸發(fā)。這樣提供了管理描述符數(shù)據(jù)的可擴展方式。例如,設備驅(qū)動能添加10幀到發(fā)送描述符數(shù)組,并設置中斷位在描述符數(shù)組中的描述符編號5。這將在發(fā)送描述符數(shù)組被完全耗盡之前借助中斷服務程序
14、。設備驅(qū)動能夠添加另外的一批幀到描述符數(shù)組,而不需要中斷連續(xù)的傳送幀。幀分片:為了最大的幀存儲的伸縮性,幀能被分割為多個分片,分片位于內(nèi)存中的不同位置。這樣一個描述符用于一個分片。所以,一個描述符能夠指向單獨的幀或一個幀分片。通過使用分片,分散/聚集DMA能夠被使用。發(fā)送幀從內(nèi)存中的多個分片聚集起來,接收幀能被分散為多個內(nèi)存中的分片。通過將分片組合在一起,可以從小的內(nèi)存區(qū)域產(chǎn)生一個大的幀。分片的另外一個使用,能夠定位一個幀頭和幀的有效載荷在不同的地方,將這些分片組合起來而不需要在設備驅(qū)動中進行拷貝操作。為了傳輸,描述符控制域的最后一位指明是否分片是某一幀的最后一個分片。對于接收幀,狀態(tài)字的St
15、atusInfo域的LastFrag位指明是否分片是某一幀的最后一個分片。如果LastFrag位為0,則下一個描述符屬于相同的以太網(wǎng)幀;如果LastFrag位為1,則下一個描述符為一個新的以太網(wǎng)幀。P322初始化復位之后,以太網(wǎng)軟件驅(qū)動需要初始化以太網(wǎng)塊。在初始化期間軟件需要做:從MAC中移除軟復位條件通過MAC的MIIM接口配置PHY選擇是RMII模式或MII模式配置發(fā)送和接收DMA引擎,包括描述符數(shù)組配置MAC中的主寄存器組使能接收和發(fā)送數(shù)據(jù)路徑依賴PHY,軟件需要通過MII管理接口初始化PHY中的寄存器。軟件通過設置MAC中的MCFG、MCMD、MADR寄存器能夠讀寫PHY寄存器。寫數(shù)據(jù)
16、應該寫到MWTD寄存器,讀數(shù)據(jù)和狀態(tài)信息應該從MRDD 和 MIND寄存器中讀取。以太網(wǎng)塊支持RMII和MII的PHY。在初始化期間,軟件必須通過設置命令寄存器,選擇MII或RMII模式。初始化完成后,RMII或MII模式不能被修改。在轉(zhuǎn)換為RMII模式之前,當以太網(wǎng)塊為MII模式,則默認的軟件復位(MAC1寄存器的15位)必須被不激活。在這個操作中phy_tx_clk信號和phy_rx_clk信號是必須的。一旦RMII PHY被使用了,phy_tx_clk信號和phy_rx_clk信號會被連接到phy_ref_clk信號。通過設備驅(qū)動在內(nèi)存中分片描述符數(shù)組和狀態(tài)數(shù)組,發(fā)送和接收DMA引擎應該
17、被初始化。發(fā)送和接收功能有他們自己專用的描述符數(shù)組和狀態(tài)數(shù)組。這些數(shù)組的基地址需要被設置到TxDescriptor/TxStatus 和 RxDescriptor/RxStatus寄存器中。數(shù)組中描述符的數(shù)目要與數(shù)組中狀態(tài)的數(shù)目匹配。請注意,發(fā)送描述符、接收描述符、接收狀態(tài)都是8個字節(jié),而發(fā)送狀態(tài)為4個字節(jié)。所有的描述符數(shù)組和發(fā)送狀態(tài)需要4字節(jié)邊界對齊。接收狀態(tài)數(shù)組需要8字節(jié)邊界對齊。在描述符數(shù)組中的描述符數(shù)目需要被寫到TxDescriptorNumber/RxDescriptorNumber寄存器中。寄存器中的值為真實的數(shù)目減1。例如,如果描述符數(shù)組有4個描述符,則描述符寄存器的數(shù)目值為3。
18、在設置好描述符數(shù)組后,在使能接收數(shù)據(jù)路徑之前幀緩沖需要分配給接收描述符。接收描述符的包域需要填充描述符幀緩沖的基地址。在接收描述符其他的控制域中需要包含數(shù)據(jù)緩沖區(qū)的大小,使用-1編碼。接收數(shù)據(jù)路徑有一個可配置的過濾功能,對于丟棄/忽略指定的以太網(wǎng)幀。在初始化期間,過濾功能應該被配置。在硬件復位使用后,在MAC中的軟件復位位被激活。在以太網(wǎng)塊被使能之前,軟件復位條件需要被移除。接收功能的使能需要兩個步驟。接收DMA管理器需要使能,MAC的接收數(shù)據(jù)路徑需要使能。為了阻止在接收DMA引擎中溢出,接收DMA引起應該被使能,通過設置命令寄存器中的RxEnable位。在使能MAC的接收數(shù)據(jù)路徑之前,通過設
19、置MAC1寄存器的RECEIVE ENABLE位。發(fā)送DMA引擎可以在任何時候使能,通過設置命令寄存器的TxEnable位。在使能數(shù)據(jù)路徑之前,在MAC中的一些選項能被設置。例如自動流控制,發(fā)送和接收環(huán)回驗證,全雙工/半雙工模式。如果沒有接收和發(fā)送數(shù)據(jù)路徑的復位,描述符數(shù)組基地址和描述符數(shù)組大小不能被修改。P323發(fā)送處理設備驅(qū)動建立描述符和數(shù)據(jù):如果描述符數(shù)組滿,則在寫描述符到描述符數(shù)組之前設備驅(qū)動應該等待描述符數(shù)組變?yōu)椴粷M。如果描述符數(shù)組不滿,設備驅(qū)動應該使用通過TxDescriptor.指向數(shù)組下標為TxProduceIndex的描述符。描述符中的包指針被設置為指向被傳輸?shù)臄?shù)據(jù)幀或幀分片
20、。描述符的命令域中的大小域應該被設置為分片緩沖區(qū)中的字節(jié)數(shù)目,-1編碼。在描述符的控制域中,額外控制信息需要被指明。在寫描述符之后,描述符被處理后給硬件通過增加TxProduceIndex寄存器。如果發(fā)送數(shù)據(jù)路徑被禁止,設備驅(qū)動不應該忘記使能發(fā)送數(shù)據(jù)路徑,通過設置命令寄存器中的TxEnable位。P324當有多分片傳輸時的分片且不是最后一個分片,描述符的Last位必須為0;最后一個分片的Last位為1。當幀被傳輸或傳輸狀態(tài)被提交到內(nèi)存,為了觸發(fā)中斷,設置描述符控制域的中斷位為1。為了讓硬件添加CRC到以太網(wǎng)幀的幀序列控制域,設置描述符的CRC位。如果CRC沒有被軟件添加,則硬件應該添加CRC。
21、為了使能自動填塞小幀到最小需求的幀大小,設置描述符的控制域的Pad位為1。典型的應用,CRC位和Pad位都設置為1。設備驅(qū)動使用IntEnable寄存器來建立中斷,來等待硬件信號的完成或周期性地檢測傳輸?shù)倪M度。當硬件消費描述符在數(shù)組的開始位置,可以添加新幀到描述符數(shù)組的尾部。設備驅(qū)動可以復位命令寄存器的TxEnable位為0來停止傳輸進程。傳輸不會立即停止,已經(jīng)傳輸?shù)膸瑫鬏斖瓿?,在不激活?shù)據(jù)路徑之前,狀態(tài)會提交給內(nèi)存。設備驅(qū)動讀狀態(tài)寄存器的TxStatus位,可以檢測傳輸路徑的狀態(tài)。只要傳輸數(shù)據(jù)路徑被使能,且對應的TxConsumeIndex和TxProduceIndex不相等。例如,硬件仍
22、然需要處理來自描述符數(shù)組的幀,狀態(tài)寄存器的TxStatus位將會變?yōu)?(激活)。發(fā)送DMA管理器讀發(fā)送描述符數(shù)組:當TxEnable位被設置,發(fā)送DMA管理器從由TxDescriptor和TxConsumeIndex決定的內(nèi)存地址中讀描述符。請求的描述符數(shù)目由硬件(TxProduceIndex - TxConsumeIndex)擁有的描述符總數(shù)決定。塊傳輸描述符使內(nèi)存載入最小化。返回自內(nèi)存的讀數(shù)據(jù)被緩存并需要消費。發(fā)送DMA管理器發(fā)送數(shù)據(jù):在讀描述符之后,發(fā)送DMA引擎從內(nèi)存中讀取與之相聯(lián)系的幀數(shù)據(jù)并發(fā)送幀。發(fā)送完成后,發(fā)送DMA管理器寫狀態(tài)信息到狀態(tài)域的StatusInfo和StatusHa
23、shCRC字。在狀態(tài)信息被提交到內(nèi)存后,只更新TxConsumeIndex的值,這個被內(nèi)存接口中的內(nèi)部標記協(xié)議檢測。發(fā)送DMA管理器繼續(xù)發(fā)送幀,知道描述符數(shù)組變?yōu)榭?。如果發(fā)送描述符數(shù)組為空,則狀態(tài)寄存器的TxStatus位變?yōu)?(不激活)。如果描述符數(shù)組變?yōu)榭?,以太網(wǎng)硬件將設置IntStatus寄存器的TxFinishedInt位。發(fā)送數(shù)據(jù)路徑將被使能。當載入描述符,發(fā)送DMA管理器檢測描述符控制域的Last位。如果Last位為0,表示幀由多個分片組成。發(fā)送DMA管理器聚集在內(nèi)存中的所有分片,訪問幀描述符的字符串,作為一個在以太網(wǎng)連接上的以太網(wǎng)幀發(fā)送他們。當發(fā)送DMA管理器發(fā)現(xiàn)描述符的控制域的
24、Last位被設置為1,這說明為幀的最后一個分片,幀的結(jié)尾被找到了。P325更新ConsumeIndex:每一次發(fā)送DMA管理器提交一個狀態(tài)字到內(nèi)存,他完成了描述符的傳輸,他增加TxConsumeIndex去處理描述符返回到設備驅(qū)動軟件。在硬件處理他之后,軟件能夠重新使用描述符為新的傳輸。設備驅(qū)動軟件能夠追蹤DMA管理器的進程,通過讀TxConsumeIndex寄存器來看發(fā)送進程現(xiàn)在是什么程度。當發(fā)送描述符數(shù)組完全空,則TxConsumeIndex寄存器維持他的最后一個值。寫發(fā)送狀態(tài):在幀被發(fā)送到(R)MII總線上,幀描述符的StatusInfo字被DMA管理器更新。如果描述符是一幀(或整個幀滅
25、有分片)的最后一個分片,則幀傳輸?shù)某晒蚴?,依賴于狀態(tài)中的錯誤標記(Error, LateCollision, ExcessiveCollision, Underrun, ExcessiveDefer, Defer)是否被設置。沖突計數(shù)域被設置為被設置為幀引起的沖突的數(shù)目,多達在沖突窗口/MAC的重試寄存器中可編程的重傳的最大數(shù)目。除了幀中最后一個分片的其他分片的狀態(tài)被寫,只要幀中的數(shù)據(jù)被發(fā)送DMA管理局接收。即使一個幀分片的描述符不同于最后一個分片,錯誤標記通過AHB接口返回。如果在多分片幀的發(fā)送期間,以太網(wǎng)塊檢測到了發(fā)送錯誤,幀中所有的剩余分片仍然重AHB接口中讀取。一個錯誤產(chǎn)生之后,剩
26、下的傳輸數(shù)據(jù)被以太網(wǎng)塊丟棄。如果在多分片幀的傳輸過程中有錯誤,錯誤狀態(tài)將被重復,直到最后一個分片傳輸完成。幀中除了最后一個分片的其余分片的狀態(tài)將被寫,只要幀中的數(shù)據(jù)被發(fā)送DMA管理器接收。如果錯誤被足夠早的檢測到,這將包括錯誤信息。在以太網(wǎng)連接上傳輸完成后,最后幀中最后一個分片的狀態(tài)被寫。在幀中任何位置發(fā)生的錯誤,在最后一個分片的狀態(tài)總是反映出來。最后一幀的傳輸狀態(tài)能夠通過讀TSV0 和TSV1寄存器來檢測。這些寄存器不能報告分片基礎的狀態(tài),不能存儲之前發(fā)送幀的信息。他們主要是用來提供調(diào)試目的,因為通過幀的描述符,驅(qū)動軟件和以太網(wǎng)塊直接的通信被產(chǎn)生。只要MAC的內(nèi)部狀態(tài)有效,則狀態(tài)寄存器有效,
27、當發(fā)送和接收進程停止時,狀態(tài)寄存器應該被讀取。發(fā)送錯誤處理:P326發(fā)送觸發(fā)中斷:發(fā)送數(shù)據(jù)路徑能夠產(chǎn)生4種不同的中斷類型:如果描述符控制域的中斷位被設置,在發(fā)送分片和提交相關的發(fā)送狀態(tài)到內(nèi)存之后,發(fā)送DMA將設置IntStatus寄存器的TxDoneInt位。即使描述符(分片)不是多分片幀的最后一個,描述符中的中斷位會被用于產(chǎn)生一個中斷。當以太網(wǎng)硬件使能,如果描述符數(shù)組為空,硬件將設置IntStatus寄存器的TxFinishedInt位。如果AHB接口不能夠消費發(fā)送狀態(tài)在足夠高的帶寬,發(fā)送會溢出,這種情況會設置IntStatus寄存器中的TxUnderrun位。這是一個嚴重的錯誤,需要一個軟
28、復位發(fā)送隊列。發(fā)送錯誤(LateCollision, ExcessiveCollision, or ExcessiveDefer),或設備驅(qū)動提供了初始分片但不能提供剩下的分片的多分片幀,或非致命溢出,硬件將設置IntStatus寄存器中的TxErrorInt位。P327所有上面的中斷都能使能或禁止,通過設置或復位IntEnable寄存器中對應的位。使能或禁止不影響IntStatus寄存器的內(nèi)容,只是發(fā)送中斷狀態(tài)給cpu(通過中斷向量控制器)。不論是個別的幀或整個鏈表,中斷是一種很好的通信方式,在DMA管理器和設備驅(qū)動之間。中斷觸發(fā)設備驅(qū)動去檢測已經(jīng)被處理的描述符的狀態(tài)字。發(fā)送例子:復位之后,
29、DMA寄存器的值需要清零。在初始化期間,設備驅(qū)動將在內(nèi)存中分配描述符數(shù)組和狀態(tài)數(shù)組。在這個例子中,4個描述符被分配,描述符數(shù)組是4*2*4字節(jié)且4字節(jié)地址邊界對齊。(我的理解:Packet域為4字節(jié),CONTROL域為4字節(jié),所以一個描述符數(shù)組元素為8字節(jié);這個例子中共4個描述符,所以描述符數(shù)組大小為8字節(jié)*4=32字節(jié))描述符數(shù)組的數(shù)目域狀態(tài)數(shù)組的數(shù)目匹配,所以狀態(tài)數(shù)組的數(shù)目為4個元素。狀態(tài)數(shù)組是4*1*4個字節(jié)且4字節(jié)地址邊界對齊。(我的理解:StatusInfo域為4字節(jié),所以一個狀態(tài)數(shù)組元素為4字節(jié);這個例子中共4個狀態(tài)符,所以狀態(tài)數(shù)組大小為4字節(jié)*4=16字節(jié))設備驅(qū)動寫描述符數(shù)組的
30、基地址(0x080080EC)到TxDescriptor寄存器中,寫狀態(tài)數(shù)組的基地址(0x080081F8)到TxStatus寄存器中。設備驅(qū)動寫描述符和狀態(tài)符的數(shù)目減1(即4-1=3)到TxDescriptorNumber寄存器中。數(shù)組中的描述符和狀態(tài)符不需要被初始化。在這點上,發(fā)送數(shù)據(jù)路徑被使能,通過設置命令寄存器的TxEnable位。當沒有進一步的幀發(fā)送時,如果發(fā)送數(shù)據(jù)路徑被使能,TxFinishedInt中斷標志將被設置。為了減少處理器的中斷載入,只需使能需要的中斷,通過設置IntEnable寄存器中需要的位?,F(xiàn)在假設應用程序軟件想要發(fā)送12字節(jié)一幀通過TCP/IP協(xié)議(在實際的應用程
31、序中,幀將大于12字節(jié))。TCP/IP協(xié)議棧將添加頭部到幀中。幀頭部不必立即放到內(nèi)存中的凈負荷數(shù)據(jù)前面。設備驅(qū)動能夠配置發(fā)送DMA去組合幀頭部和凈負荷數(shù)據(jù)。這樣做,設備驅(qū)動將配置第一個描述符指向幀頭部,描述符中的Last標志將被設置為false或0,以表明是一個多分片傳輸。設備驅(qū)動將配置下一個描述符指向?qū)嶋H的凈負荷數(shù)據(jù)。一個凈負荷緩沖區(qū)最大可以為2KB,所以一個單個描述符可以滿足描述凈負荷緩沖區(qū)。對應例子的目的,雖然凈負荷被分配到了2個描述符上。在數(shù)組中的第一個描述符描述了幀頭部,數(shù)組中的第二個描述符描述了初始的8字節(jié)凈負荷。數(shù)組中的第三個描述符描述了幀中剩余的4字節(jié)。在第三個描述符中的控制字
32、的Last位被設置為true或1,表明是該幀中的最后一個描述符。在這個例子中,在該幀的最后一個分片對應的描述符的控制域的中斷位被設置,為了在發(fā)送完成后觸發(fā)一個中斷。描述符控制字的大小域被設置為分片緩沖區(qū)的字節(jié)數(shù),-1編碼。在真實的設備驅(qū)動中,如果凈負荷大于2KB,則凈負荷被分割到多個描述符。發(fā)送凈負荷數(shù)據(jù)被送入硬件不需要設備驅(qū)動去拷貝凈負荷數(shù)據(jù)。在設置好了發(fā)送的描述符后,設備驅(qū)動增加3到TxProduceIndex寄存器,因為有3個描述符被配置了。如果在初始化期間,發(fā)送數(shù)據(jù)路徑?jīng)]有被使能,則設備驅(qū)動需要現(xiàn)在使能數(shù)據(jù)路徑。如果發(fā)送數(shù)據(jù)路徑被使能,只要以太網(wǎng)塊檢測到TxProduceIndex不等
33、于TxConsumeIndex,以太網(wǎng)塊將開始發(fā)送幀,在復位后TxProduceIndex和TxConsumeIndex都為0。發(fā)送DMA將開始從內(nèi)存中讀描述符。內(nèi)存系統(tǒng)將返回描述符,且當讀發(fā)送數(shù)據(jù)分片時,以太網(wǎng)塊將一個一個地接收描述符。只要發(fā)送的讀取數(shù)據(jù)從內(nèi)存中返回,則以太網(wǎng)塊將開始在以太網(wǎng)連接上發(fā)送,通過(R)MII接口。在發(fā)送了幀的每一個分片后,發(fā)送DMA將寫分片傳輸?shù)臓顟B(tài)。幀中除了最后一個分片的其余分片的狀態(tài)將被寫,只要幀中的數(shù)據(jù)被發(fā)送DMA管理器接收。只有在以太網(wǎng)連接發(fā)送完成后,幀中最后一個分片的狀態(tài)才被寫。P329因為最后一個分片的描述符的中斷位被設置,在提交最后一個分片的狀態(tài)給內(nèi)
34、存后,以太網(wǎng)塊將觸發(fā)一個TxDoneInt中斷,這將觸發(fā)設備驅(qū)動去檢查狀態(tài)信息。在這個例子中,設備驅(qū)動不能添加新描述符,只要以太網(wǎng)塊沒有增加TxConsumeIndex,因為描述符數(shù)組已經(jīng)滿了(即使一個描述符沒有被配置)。只有在硬件提交了第一個分片的狀態(tài)給內(nèi)存,且TxConsumeIndex被DMA管理器設置為1,設備驅(qū)動才能配置下一個(第4個)描述符。在第一幀被發(fā)送完成之前,第4個描述符可以被配置。在這個例子中,硬件添加CRC到幀中。如果設備驅(qū)動軟件添加CRC,CRC拖車可以被考慮另外一個幀分片,這可以通過做另外一個聚集DMA來添加。每一個數(shù)據(jù)字節(jié)被傳輸?shù)組II接口需要兩個步驟。如果CRC使
35、能,則在MII接口上,以太網(wǎng)塊添加前序、幀定界符頭部、CRC拖車。一旦在MII接口上的傳輸開始,傳輸就不能被中斷,否則會產(chǎn)生一個溢出錯誤,這就是為什么描述符和數(shù)據(jù)讀命令要盡可能的執(zhí)行和流水線。對于RMII PHY,在以太網(wǎng)塊和PHY之間的數(shù)據(jù)通信是以數(shù)據(jù)寬度(2位)的一半進行通信的,以及2倍的時鐘頻率(50MHZ)。在10Mbps模式,數(shù)據(jù)只能每10個時鐘周期傳輸一次。接收處理P333接收例子:復位之后,DMA寄存器的值將為0。在初始化期間,設備驅(qū)動將在內(nèi)存中分配描述符數(shù)組和狀態(tài)數(shù)組。在這個例子中,4個描述符的數(shù)組被分配,數(shù)組是4*2*4字節(jié)且4字節(jié)地址邊界對齊。(我的理解:PACKET域為4
36、個字節(jié),CONTROL域為4個字節(jié),所以一個描述符為8個字節(jié),共4個描述符,則描述符數(shù)組的大小為8字節(jié)*4=32字節(jié))描述符的個數(shù)要與狀態(tài)的個數(shù)匹配,狀態(tài)數(shù)組包含4個元素,狀態(tài)數(shù)組為4*2*4字節(jié)且8字節(jié)地址邊界對齊。(我的理解:StatusInfo域為4個字節(jié),StatusHashCRc域為4個字節(jié),所以一個狀態(tài)為8個字節(jié),共4個狀態(tài),則狀態(tài)數(shù)組的大小為8字節(jié)*4=32字節(jié))設備驅(qū)動寫描述符數(shù)組的基地址(0x080090ec)到RxDescriptor寄存器,寫狀態(tài)數(shù)組的基地址(0x080091f8)到RxStatus寄存器。設備驅(qū)動寫描述符和狀態(tài)的數(shù)目減1(4-1=3)到RxDescrip
37、torNumber寄存器。數(shù)組中的描述符和狀態(tài)不需要被初始化。分配了描述符之后,一個分片緩沖區(qū)需要分配給每一個描述符。每一個分片緩沖區(qū)的大小為1字節(jié)2K字節(jié)。分片緩沖區(qū)的基地址存放在描述符的Packet域中。分片緩沖區(qū)的字節(jié)總數(shù)存放在描述符控制字的Size域中。描述符控制字的中斷域可以被設置,用來產(chǎn)生一個中斷,只要描述符被接收進程進行了填充。在這個例子中,分片緩沖區(qū)為8字節(jié),所以描述符控制字的Size域的值被設置為7。在這個例子中,分片緩沖區(qū)實際是一個連續(xù)的內(nèi)存空間,即使一個幀被分割為多個分片,分片緩沖區(qū)仍然是一個線性的連續(xù)的內(nèi)存空間。當描述符在描述符數(shù)組的尾部環(huán)回,這個幀將不在一個連續(xù)的內(nèi)存空間中。P334設備驅(qū)動應該使能接收進程,通過寫1到命令寄存器的RxEnable位,在這之后,MAC需要使能通過寫1到MAC1配置寄存器的RECEIVE ENABLE位。以太網(wǎng)塊現(xiàn)在將開始接收以太網(wǎng)幀。為了減少處理器的中斷載入,一些中斷可以被禁止通過設置IntEnable寄存器中需要的位。接收DMA管理器使能之后,將開始執(zhí)行描述符讀命令。在這個例子中,描述符的數(shù)目是4。初始
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年上海杉達學院單招職業(yè)技能測試題庫附答案解析
- 2025年青島城市學院馬克思主義基本原理概論期末考試模擬題附答案解析(必刷)
- 2025年順德職業(yè)技術大學馬克思主義基本原理概論期末考試模擬題帶答案解析(奪冠)
- 2025年樂至縣招教考試備考題庫附答案解析(必刷)
- 2025年杭州師范大學馬克思主義基本原理概論期末考試模擬題帶答案解析
- 2025年麗江師范學院馬克思主義基本原理概論期末考試模擬題附答案解析(奪冠)
- 2025年貴陽職業(yè)技術學院單招職業(yè)技能考試題庫帶答案解析
- 2025年河南城建學院馬克思主義基本原理概論期末考試模擬題帶答案解析(必刷)
- 2025年甘肅省平?jīng)龅貐^(qū)單招職業(yè)傾向性考試題庫附答案解析
- 2026年中山職業(yè)技術學院單招綜合素質(zhì)考試題庫帶答案解析
- 電信崗位晉升管理辦法
- 業(yè)務提成協(xié)議勞務合同
- T-FIQ 003-2025 青海省可持續(xù)掛鉤貸款服務指南
- 企業(yè)危險化學品安全管理承諾書
- GB/T 11182-2025橡膠軟管增強用鋼絲
- 2025年關于院外購藥吃回扣自查報告
- 【化學】遼寧省丹東市2025屆高三下學期總復習質(zhì)量測試(一)試題(解析版)
- 信息系統(tǒng)分析與設計 課件全套 廖浩德 0 課程簡介、1.1 計算與計算學科 -9 動態(tài)行為建模
- 儀表聯(lián)鎖培訓課件
- 2025版小學語文新課程標準
- 2025至2030中國電催化氧化設備行業(yè)項目調(diào)研及市場前景預測評估報告
評論
0/150
提交評論