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 支持功能来实现。