<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

簡單地分析幾個Ack/Nak機制的例子

SwM2_ChinaAET ? 來源:未知 ? 作者:李倩 ? 2018-05-30 09:16 ? 次閱讀

這一篇文章來簡單地分析幾個Ack/Nak機制的例子。

Example 1. Example of Ack

Step1 設備A準備依次向設備B發送5個TLP,其對應的序列號分別為3,4,5,6,7;

Step2 設備B成功的接收到了TLP3,并將NEXT_RCV_SEQ從3加到4,但是設備B沒有立即向設備A返回Ack(此時AckNak_LATENCY_TIMER尚未溢出);

Step3 設備B又成功地接收到了TLP4和TLP5;

Step4 假設此時AckNak_LATENCY_TIMER溢出了,則設備B會向設備A返回一個帶有序列號為5的Ack DLLP。同時,設備B將AckNak_LATENCY_TIMER復位,但是并未重新啟動,直到設備B成功地接收到了TLP6。

Step5 設備A接收到了Ack5,將REPLAY_TIMER和REPLAY_NUM復位,然后將Buffer中的序列號5(和5之前)的TLP備份移除;

Step6 一旦設備B接收到TLP6,AckNak_LATENCY_TIMER又會被重新啟動。

Example 2. Ack with Sequence Number Rollover

Step1 設備A準備依次向設備B發送序列號為4094,4095,0,1,2的TLP,注意第一個發送的是TLP4094,最后一個發送的是TLP2。也就是說序列號Rollover了;

Step2 設備B成功接收到TLP4094~TLP1后,假設此時AckNak_LATENCY_TIMER溢出了,則設備B向設備A返回Ack1 DLLP;

Step3 設備A接收到Ack1,并將Buffer中的序列號為1(和之前的,包括TLP4094~TLP1)的TLP備份移除。同時將REPLAY_TIMER和REPLAY_NUM復位。

Example 3. Example of Nak

Step1 假設設備A準備依次向設備B發送序列號為4094,4095,0,1,2的TLP;

Step2 設備B成功地接受了TLP4094,并將NEXT_RCV_SEQ加1,變為4095;

Step3 設備B接收到了TLP4095,但是該TLP并未通過CRC校檢(即存在錯誤)。此時無論AckNak_LATENCY_TIMER處于何種狀態,設備B都會立即向設備A返回Ack4094(注意返回的Ack DLLP中的序列號為上一次成功接收的TLP的序列號)。同時設備B將AckNak_LATENCY_TIMER停止并復位;

Step4 設備B會一直等待設備A向其發送TLP4095,但是設備A卻并不知發生了什么,在接收到設備B向其返回的Ack/Nak之前,會繼續發送TLP0~TLP2,只是設備B會直接忽略這些TLP。

Step5 當設備A接收到來自設備B的Nak4094 DLLP時,會將Buffer中的TLP4094(和之前的TLP)移除,并從TLP4095從新開始發送。同時,將REPLAY_TIMER復位。

注:Mindshare書中,此處說還會復位REPLAY_NUM,這是不正確的。

Step6 由于設備A接收到的是Nak,而不是Ack,因此設備A會重新啟動REPLAY_TIMER并將REPLAY_NUM加一;

Step7 一旦設備B成功地接收到TLP4095,設備B便會清除NAK_SCHEDULED標志位,并將NEXT_RCV_SEQ計數器加一,同時重啟AckNak_LATENCY_TIMER。

Example 4. Example of Lost TLPs

Step1 假設設備A準備依次向設備B發送TLP 4094,4095,0,1,2;

Step2 設備B成功地接收了TLP4094~TLP0,并向設備A返回Ack0,此時設備B的NEXT_RCV_SEQ為1;

Step3 設備A接收到設備B返回的Ack0,從Buffer中移除相應的TLP備份;

Step4 設備B接收到了TLP2(而不是TLP1),也就是說TLP1在傳輸過程中丟失了。此時,設備B會直接將TLP2丟棄,并將NAK_SCHEDULED標志位置位,同時向設備A返回Nak0 DLLP;

Step5 設備A接收到Nak0 DLLP后,會將Buffer中的TLP0(以及之前的,如果有的話)移除。同時,從TLP1開始,重新向設備B發送。

Example 5. Example of Bad Nak

Step1 設備A準備依次向設備B發送TLP 4094,4095,0,1,2;

Step2 設備B成功的接收了TLP4094~TLP0,但是由于AckNak_LATENCY_TIMER尚未溢出,所以設備B沒有立即向設備A返回Ack DLLP;

Step3 設備B發現TLP1中存在錯誤,于是向設備A返回Nak0 DLLP,并將NAK_SCHEDULED標志位置位;

Step4 設備A發現其接收到的Nak0 DLLP中也存在錯誤(CRC校檢不通過),于是直接丟棄了Nak0;

Step5 然而設備B卻一直在等待設備A向其發送TLP1,在其成功接收TLP1之前,設備B不會返回任何Ack或者Nak,不管設備A向其發送什么(除TLP1之外的)。設備B的NAK_SCHEDULED標志位也一直保持置位;

Step6 尷尬的是,設備A并不知道設備B想要其重發TLP1(由于沒有成功接收到Nak0)。因此,設備A會繼續向設備B發送之后的TLP,但是由于一直沒有接收到設備B的Ack/Nak DLLP,設備A的REPLAY_TIMER會在一段時間后溢出;

Step7 當設備A的REPLAY_TIMER溢出后,設備A會向Buffer中的所有TLP都重新發送一遍,并重啟REPLAY_TIMER,同時將REPLAY_NUM計數器加一;

Step8 設備B會再次接收到TLP4094~TLP0,但是這在之前就已經成功接受到過了。因此設備B會直接將其丟棄,且不會像設備A返回任何的Ack或者Nak

Step9 此時,設備B再次接收到了TLP1,并未發現錯誤(成功接收)。于是,設備B將NAK_SCHEDULED標志位清零,并重啟AckNak_LATENCY_TIMER,將NEXT_RCV_SEQ加一。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 計數器
    +關注

    關注

    32

    文章

    2126

    瀏覽量

    93006
  • TLP
    TLP
    +關注

    關注

    0

    文章

    30

    瀏覽量

    15519

原文標題:【博文連載】PCIe掃盲——Ack/Nak 機制詳解(二)

文章出處:【微信號:ChinaAET,微信公眾號:電子技術應用ChinaAET】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    BLE中的ACK機制

    ACK
    橙群微電子
    發布于 :2023年03月31日 09:52:36

    簡單的窗口及菜單的例子

    簡單的窗口及菜單的例子:  Dos匯編,Win32匯編,硬件資料,豐富的匯編、C 源代碼,編程例子詳解。
    發表于 05-06 16:36 ?8次下載

    什么是ACK (ACKnowledge Character)

    什么是ACK (ACKnowledge Character)  英文縮寫: ACK (ACKnowledge Character) 中文譯名: 確認字符 分  類: 傳輸與接入
    發表于 02-22 10:12 ?1611次閱讀

    labview與access操作簡單例子

    做的labview與access操作簡單例子,互相學習吧
    發表于 03-15 16:00 ?87次下載

    24C02中IIC總線的應答信號(ACK)時序圖分析

    24C02中IIC總線的應答信號(ACK)時序圖分析,很好的單片機學習資料。
    發表于 03-21 17:30 ?93次下載

    各種簡單例子源碼

    關于單片機開發 基于IAR平臺 各種簡單例子源碼 入門級別
    發表于 06-20 16:09 ?1次下載

    CAN總線波形中為什么ACK電平偏高?

    CAN總線一直以實時性強、傳輸距離遠、抗干擾能力強、數據保證到達等特點而廣泛應用于高可靠性的場合。但常常在觀察CAN通信波形時,我們會發現差分電平在ACK段突然增高,這是什么原因導致的呢?這里結合測試實例對ACK電平偏高的原因做簡單
    發表于 07-05 15:08 ?8921次閱讀
    CAN總線波形中為什么<b class='flag-5'>ACK</b>電平偏高?

    PCIe總線的通信機制

    那么為什么要分為Non-Posted和Posted兩種類型呢?對于Memory Writes來說,對效率要求較高,因此采用了Posted的方式。但是這并不意味著Posted類型的操作不需要Completer進行應答,只是此時Completer采用了另一種應答機制——Ack
    的頭像 發表于 04-24 09:41 ?1.2w次閱讀
    PCIe總線的通信<b class='flag-5'>機制</b>

    Ack/Nak機制詳細介紹

    Ack/Nak是一種由硬件實現的,完全自動的機制,目的是保證TLP有效可靠地傳輸。Ack DLLP用于確認TLP被成功接收,Nak DLLP
    的頭像 發表于 05-29 14:46 ?1.5w次閱讀
    <b class='flag-5'>Ack</b>/<b class='flag-5'>Nak</b><b class='flag-5'>機制</b>詳細介紹

    C0603X5R226M6R3NAK 片式高容多層陶瓷電容器

    電子發燒友網為你提供EYANG(EYANG)C0603X5R226M6R3NAK相關產品參數、數據手冊,更有C0603X5R226M6R3NAK的引腳圖、接線圖、封裝手冊、中文資料、英文資料,C0603X5R226M6R3NAK
    發表于 01-29 11:04

    C0603X5R226X6R3NAK 片式高容多層陶瓷電容器

    電子發燒友網為你提供EYANG(EYANG)C0603X5R226X6R3NAK相關產品參數、數據手冊,更有C0603X5R226X6R3NAK的引腳圖、接線圖、封裝手冊、中文資料、英文資料,C0603X5R226X6R3NAK
    發表于 03-17 19:41

    MATLAB代碼和例子分析

    MATLAB代碼和例子分析。
    發表于 05-27 09:44 ?0次下載

    ack文本查找工具

    ./oschina_soft/ack3.zip
    發表于 05-25 09:24 ?0次下載
    <b class='flag-5'>ack</b>文本查找工具

    PCIe鏈路層里的ACK/NAK介紹

    Spec洋洋灑灑數千頁,也不會從頭到尾去通讀整個協議。對于cocotbext-pcie里面牽涉到的鏈路層的ACK/NAK,牽涉到的PCIe背景,聊做記錄。 ????本文僅結合PCIe Spce
    的頭像 發表于 06-25 10:31 ?1649次閱讀
    PCIe鏈路層里的<b class='flag-5'>ACK</b>/<b class='flag-5'>NAK</b>介紹

    python最簡單for循環例子

    Python是一種簡單而又強大的編程語言,通過其清晰的語法和豐富的功能庫,我們可以實現各種各樣的任務。其中一個最基本的語法結構就是for循環,讓我們來看一下如何使用for循環來編寫一個最簡單例子
    的頭像 發表于 11-21 14:53 ?497次閱讀
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>