作者aztec1234 (調適生活)
看板Headphone
標題Re: [問題] 1394、USB或是PCI-E數位輸出?
時間Sun Feb 1 15:58:19 2009
醜人獻曝一下...
小弟最近的工作正好需要研讀USB的技術與規格,
不過由於對Audio的部分了解並不多,只是看到有人提到USB傳送的"數位訊號",
所以想跟大家分享一下USB傳送的數位訊號是什麼樣的型式,
有錯還請大家幫忙指正!
USB是一種Host-Device型式的傳輸介面,首先一定要有一個Host端,
由Host端去辨認連接的Device為何並去控制存取,只有兩個Device連結是無法傳輸的
(IEEE 1394是Peer-to-Peer,任何連接的節點都可以是Host或Device)
(USB On-The-Go解決了兩個Device互連的傳輸問題,所以1394的優勢愈來愈小)
如同許多傳輸介面(I2C,LVDS...etc),
USB也是差動傳輸處理,由D+與D-這樣的一對data line來傳送資料,
通過pull-up/down電阻將D+或D-上的電壓準位拉至一定程度,用來產生等效的差動電壓,
來達到高或低的電壓準位,方便USB Host去辨認連接的Device為Low-speed,
Full-speed或High-speed裝置,並去控制、通訊等等
所以USB cable上的時間延遲會是個問題,
故USB選擇的傳輸編碼方式是Non-Returned to Zero Inverted, NRZI,
NRZ編碼的一種
NRZ指的是"不歸零",只有"0"與"1"兩種電壓準位狀態,
沒有介於0和1中間的狀態
NRZI的編碼方式為:
想要傳送"1"時,保持data line的電壓為原來的電壓準位
想要傳送"0"時,將data line上的電壓準位反轉
(注意,只需反轉,電壓能到多少Volt一點關係也沒有,接收端認的是"有沒有"反轉,
而不是反轉前後的電壓)
這樣的編碼方式不需靠同步的時脈訊號也能做到同步的資料傳輸,
而是藉由每一次的電壓反轉的時間來對本身的時脈作同步調整,
再用已同步調整後的時脈去解碼資料
而連續傳送"0"時,因為data line上的電壓準位不斷被反轉,
所以本身的時脈訊號也會跟著不斷被同步調整,對於同步資料處理上會有很大的好處,
故USB一開始會傳送一組"同步序列",內容為七個"0"與一個"1"
00000001
前七個"0"用來同步時脈,後一個"1"來表示"同步序列"結束,開始傳送"資料序列"
但是碰到連續的"1"時,data line的電壓準位不會被反轉,一直維持在同樣的準位,
接收方一直沒得到電壓反轉的時間,本身的時脈也不會被同步調整,
所以過長的連續"1"會造成時脈同步不佳,甚至根本沒有同步
為了解決此問題,USB在NRZI的編碼上作了"位元充填"(Bit-stuffing),
當連續傳送6個"1"後,一定會在下一個位元塞一個"0",強迫電壓準位反轉,
以同步時脈
由此可以看到,USB不會像LVDS或I2C介面那樣將資料與時脈一起傳送,
而只傳送資料,並利用NRZI編碼來造成電壓反轉,並用電壓反轉的時間去同步時脈
如果一切都很理想,那麼USB的資料同步化是很好的,
而且不用去理會jitter
不過實際上jitter仍然是個問題,因為
電壓反轉也是要時間的,
電壓反轉的時間一旦延遲,前面大家討論到jitter的影響多多少少一定出現
(電壓反轉所需的時間:把data line上的pull-up電阻斷開-->把pull-down電阻接上)
為何不作De-jitter?
只能說USB可不是為了Hi-end音響使用者所設計的,
或者這麼說,USB從來就不是因為音響需求發展的東西,
De-jitter對於大多數,或者90%以上的USB用途,
不但增加成本,而且對於使用上的改進效益可能不到增加成本的1%
而IEEE 1394為什麼不受青睞也是如此,
速度已經逐漸要被USB追上,成本比USB貴,
Peer-to-peer的優點也隨著USB OTG技術出現而沒有優勢
頻寬...以電腦效能的進步,這東西會愈來愈感覺不出來
而且Device也不需要額外外接電源
IT產業畢竟是個成本效益至上的環境,
各位Hi-end使用者小弟認為還是玩光纖或同軸吧!
--
參考文獻:
http://www.usb.org/
USB的規格書
很多網頁或書本也有相關內容,不過多多少少會有錯,
這時找找最根本的來源是比較好的選擇
跟Audio相關的在
http://www.usb.org/developers/devclass_docs
看Audio class的部分,不過小弟目前仍然在研讀中@@
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 210.66.245.169
1F:推 wwwea:push 02/01 16:09
2F:推 ckm0089:SPDIF也是這種編碼方法 數位傳輸絕對不是只有0101 02/01 16:18
3F:推 znew1219:電位差是最原始的原理(說明觀念用),根據不同應用層面才會 02/01 16:27
4F:→ znew1219:衍伸出一堆更複雜的作法 02/01 16:29
5F:→ aztec1234:SPDIF是Biphase mark code,這跟NRZI有一個關鍵不同 02/01 16:32
6F:→ aztec1234:就是Biphase mark code是帶有時脈資訊的 02/01 16:32
7F:→ aztec1234:當電壓準位要反轉時,必需在一個時脈週期裡做 02/01 16:33
8F:→ aztec1234:NRZI則完全不管時脈週期,另外SPDIF不是差動傳輸的型式 02/01 16:34
9F:推 ckm0089:感謝樓上大大賜教m(_ _)m 小弟再去仔細看清楚協定內容 02/01 17:17
10F:推 easybluea:推一個 真的是看耳機版長知識 02/01 17:32
11F:推 handoluslash:快推 不然人家會認為我看不懂 02/01 18:11
12F:推 mdisy:感謝分享 :) 02/01 19:57
13F:→ johnnycgi:長了許多知識,一定要推一個 02/01 20:15
14F:→ aztec1234:h兄抱歉!下次小弟會想辦法用更容易懂的方式說明@@ 02/01 21:02
15F:→ aztec1234:好像太多專有名詞@@...以後想想有什麼說法比較好懂 02/01 21:03
16F:推 handoluslash:38啦 是我自己知識淺薄 不關你的事 我真淺 唉 02/01 22:22
17F:推 Zenta:推! 02/01 23:24
18F:推 yugif:光纖同軸小弟都有用,不過沒hi-end的感覺,玩真空管比較實際 02/02 10:47