http://ja.wikipedia.org/wiki/Universal_Serial_Bus
sochronous : 按照有保障的速度(可能但不必然是儘快地)傳輸,可能有資料丟失,例如及時的音頻、視頻假設這沒寫錯的話,USB在傳輸音訊時也沒有錯誤更正的能力
アイソクロナス転送連続的周期的なデータを転送を行う。再送がないため確実性は保証されない。ビデオやオーディオの入出力など。
對很多即時系統來說幾乎不會考慮重傳這手段,
因為不能滿足Deadline的需求,
重傳似乎會喪失時間上的準確度。
另一方面USB能有Buffer為何SPDIF不行有?
這不過是設計上的問題,
高速介面如果沒有增大傳輸的BIT WIDTH的話
可以看成資料處理的比較快,
能夠達到的時間上的精確度比較有優勢
當然這也是在架構類似下才會有這個結論
SPDIF的資料處理後才能送,USB也是同樣的情形
兩者都無法直接將Bus傳輸過來的資料直接傳輸
都必須處理成各自的格式,才能送出
考慮line code在同步上的優勢來看,
SPDIF的Biphase mark code比USB的NRZI更有優勢
在電平上如果是用同軸來傳的話,的確SPDIF就不如USB了
在我眼中SPDIF不見的會輸給USB
=============================
以數位音訊傳輸介面來看,
目前我對USB並不是這麼樂觀(3.0不在討論範圍)
畢竟他是『Universal』,且是DataCom制定下的東西
一開始其實沒有太在意Qos的問題
光是在裝置使用Usb Bus上的排程上就有他的問題
當然你可以只使用一個USB裝置我想可以完全避免這問題
電腦身為一個訊源還不是很成熟,多功能多多少少有他的問題
電腦不是『只在播放音樂』而已,電腦在排程時並不總是在精準的時間上
讓你的播放軟體運作或是讓你的輸出裝置取得系統的資源
更換一個Driver或是Player就可以讓人有聽感上的差別,
軟體和Os上面其實是可以動手腳的
http://tinyurl.com/37rwms
大概來說是以下幾點
1. 使用高的軟體優先權
在Linux下你可以使用root的權限使用chrt將優先權類別改為FIFO,
且提高優先權
如chrt -v -r -p 50 aqualung(低到高:1~99)
Window下可以使用工作管理員,或軟體自己的設定
2. 使用高優先權的IRQ
看主機板的說明書,看PCI的IRQ佔有的資訊,
IRQ優先權從高到低(8, 9, 10, 11, 12, 13, 14, 15, 3, 4, 5, 6, 7)
儘量讓你的卡拿到高優先權的IRQ,
這些設定可以藉由BIOS和換PCI插槽改變,
有時可能必須要關閉APIC,
關閉APIC可能會造成IRQ不夠或衝突的情形,請三思而後行
3. 使用low latency的Kernel
使用Preemptible Kernel調高Timer frequency,
這些必須重新編譯Kernel
在Debain預設的Kernel是no force preemptible跟200Hz這些都是server的設定值
4. 調整你的PCI latency timers
這個timers決定你的PCI裝置可以連續使用多久的PCI Bus,
如果有裝置有過高的值可能會造成你的輸出中的gap增加
調低其他裝置(尤其是顯示卡),調高音效卡
Linux下可以用setpci -v -d '1102:0002' latency_timer=80改變
在Windows下請使用Powerstrip
http://www.geocities.com/phileosophos/tech/pcilatency.html