7.20. Silicon Labs Si470x 調頻收音機接收器驅動

版權所有 © 2009 Tobias Lorenz <tobias.lorenz@gmx.net>

7.20.1. 來自 Silicon Labs 的資訊

Silicon Laboratories 是收音機 IC 的製造商,這些 IC 如今在手機中是最常用的收音機接收器。它們通常透過 I2C 連線。但 SiLabs 也提供了一個參考設計,該設計將此 IC 與一個小型微控制器 C8051F321 整合,以形成一個 USB 收音機。此參考設計的一部分還包括二進位制和原始碼的收音機應用程式。該軟體還包含自動韌體升級到最新版本的功能。有關這些的資訊可在此處下載:http://www.silabs.com/usbradio

7.20.2. 支援的 IC

以下 IC 具有非常相似的暫存器集,因此它們已被或將在某個時候被驅動程式支援:

  • Si4700: 調頻收音機接收器

  • Si4701: 調頻收音機接收器,支援 RDS

  • Si4702: 調頻收音機接收器

  • Si4703: 調頻收音機接收器,支援 RDS

  • Si4704: 調頻收音機接收器,無需外接天線

  • Si4705: 調頻收音機接收器,無需外接天線,支援 RDS,數字 I/O

  • Si4706: 增強型 FM RDS/TMC 收音機接收器,無需外接天線,支援 RDS

    支援

  • Si4707: 帶 SAME 解碼器的專用氣象波段收音機接收器,支援 RDS

  • Si4708: 最小的調頻接收器

  • Si4709: 最小的調頻接收器,支援 RDS

有關這些的更多資訊可在此處下載:http://www.silabs.com/products/mcu/Pages/USBFMRadioRD.aspx

7.20.3. 支援的 USB 裝置

目前已知以下帶有 Silicon Labs si470x 晶片的 USB 收音機(廠商:產品)可以正常工作:

  • 10c4:818a: Silicon Labs USB FM Radio 參考設計

  • 06e1:a155: ADS/Tech FM Radio Receiver (原 Instant FM Music) (RDX-155-EF)

  • 1b80:d700: KWorld USB FM Radio SnapMusic Mobile 700 (FM700)

  • 10c5:819a: Sanei Electric, Inc. FM USB Radio (以 DealExtreme.com PCear 銷售)

7.20.4. 軟體

測試通常在 Debian/testing 下使用大多數應用程式進行

  • fmtools - 用於管理 FM 調諧器卡的實用程式

  • gnomeradio - GNOME 桌面的 FM 收音機調諧器

  • gradio - GTK FM 收音機調諧器

  • kradio - 舒適的 KDE 收音機應用程式

  • radio - 基於 ncurses 的收音機應用程式

  • mplayer - Linux 的終極電影播放器

  • v4l2-ctl - 命令列 video4linux 實用程式集合

例如,你可以使用

v4l2-ctl -d /dev/radio0 --set-ctrl=volume=10,mute=0 --set-freq=95.21 --all

還有一個 libv4l 庫可以使用。它將包含一個頻率搜尋功能,可以透過使用 radio-si470x 中的硬體功能實現,也可以透過實現我們目前在每個上述程式中都有的功能來實現。總有一天,收音機程式應該會使用 libv4l。

對於 RDS 資訊處理,目前有一個專案正在進行中:http://rdsd.berlios.de/

目前還沒有將 TMC 語句轉換為人類可讀形式的專案。

7.20.5. 音訊收聽

USB 音訊由 ALSA 的 snd_usb_audio 模組提供。建議同時選擇 SND_USB_AUDIO,因為這是從收音機獲取聲音所必需的。為了收聽,你需要重定向聲音,例如使用以下命令之一。請根據你的需要調整音訊裝置(/dev/dsp* 和 hw:x,x)。

如果你只想測試音訊(質量非常差)

cat /dev/dsp1 > /dev/dsp

如果你使用 sox + OSS,請嘗試

sox -2 --endian little -r 96000 -t oss /dev/dsp1 -t oss /dev/dsp

或者使用 sox + alsa

sox --endian little -c 2 -S -r 96000 -t alsa hw:1 -t alsa -r 96000 hw:0

如果你使用 arts,請嘗試

arecord -D hw:1,0 -r96000 -c2 -f S16_LE | artsdsp aplay -B -

如果你使用 mplayer,請嘗試

mplayer -radio adevice=hw=1.0:arate=96000 \
        -rawaudio rate=96000 \
        radio://<frequency>/capture

7.20.6. 模組引數

載入模組後,你仍然可以透過 sysfs 掛載點 /sys/module/radio_si470x/parameters 訪問其中一些引數。只讀檔案 (0444) 的內容不會更新,即使使用私有影片控制更改了 space, band 和 de。其他引數是執行時可更改的。

7.20.7. 錯誤

如果你經常遇到 -EIO 錯誤,請增加 tune_timeout。

當超時或達到頻段限制時,hw_freq_seek 返回 -EAGAIN。

如果你從 snd_usb_audio 收到任何錯誤,請向 ALSA 團隊報告。

7.20.8. 開放問題

V4L 次要裝置分配和引數設定不完善。目前正在討論解決方案。

有一個用於下載/上傳新韌體映像的 USB 介面。可以透過 request_firmware 介面實現對其的支援。

有一個 RDS 中斷模式。驅動程式已經使用相同的介面輪詢 RDS 資訊,但目前未使用中斷模式。

有一個 LED 介面,可用於覆蓋韌體中程式設計的 LED 控制。這可以透過核心中的 LED 支援功能來實現。