RTL2838电视棒EEPROM分析-基于RTL2832U,PID为2838的SDR硬件
RTL2838电视棒EEPROM分析-基于RTL2832U,PID为2838的SDR硬件
前言:
前几天水群时看到有网友聊起要买RTL2832U电视棒,看起来很贵,记得自己买的电视棒很便宜。于是问了一下,然后有网友表示RTL28382U电视棒pid为2832,而便宜的那个是RTL2838且其pid为2838,某些软件不识别这种硬件。然后我翻出自己的试了一下,还真的被识别为RTL2838(pid2838)。难道为了兼容性,必须要多花很多钱?通过大家的努力,我们把RTL2838电视棒改成了RTL2832U电视棒。
正文:
我的电视棒之前曾经拆解过,里面IC丝印为RTL2832U,且不存在任何打磨重新雕刻的痕迹。当我发现计算机将电视棒名字识别为RTL2838UHIDIR而不是RTL2832U的时候,我第一感觉也怀疑到了IC,但是IC的外观并不像假货。又有网友提供了osmocom论坛的相关WIKI,它有一句话:Many devices with EEPROM have 0x2838 as PID and RTL2838 as product name, but in fact all of them have an RTL2832U inside.Realtek never released a chip marked as RTL2838 so far.从此处我们了解到实际并没有RTL2838这款IC。
想到很多IC都会用外挂EEPROM的方式存储配置信息,我便再次想到,这款电视棒是否也是如此,而它的设备名称、PID&VID是否也如此?于是便将外壳再次拆下,果然在RTL2832U附近看到了一枚型号为24C02N的EEPROM。直接将24C02拆焊上编程器,将其数据dump到文件中。文件内容:
我们发现在dump出的EEPROM数据中存在部分区域对应USB设备信息。很明显可以看到RTL2838UHIDIR
这段文字的数据存在于0x1B
~0x33
地址区域,且字符间都相隔一个00
。从计算机上给出的信息中得知,这段数据是这个设备的产品名称。我们还发现,0x0B
~0x17
地址区域中存储的内容为Realtek
,与前面一样,字符间相隔一个00
,这段便是这个设备的制造商。最终我们还发现,0x02
~0x05
这段中存储的数据就是USB设备的PID和VID,且是以倒序的方式存储的。其中0x05
和0x04
中存储的是PID,即2838
;而0x03
和0x02
中存储的是VID,即0BDA
。这些数据也是能和计算机读出的信息相匹配的。而其他地址中存储的数据具体含义与用途,我没有查到。如果有大佬知道,欢迎补充。
有了以上的信息,我们就可以着手尝试改变它了。上面提到,有网友表示:某些软件只支持PID为2832
的设备。根据上文我们获取的信息,我们将EEPROM中的数据做如下修改,把他焊回到电视棒上,插入计算机,发现果然如预期,它变成了名为RTL2832U
、PID为2832
的电视棒。
这还没有结束,我在搜索资料的时候,意外的发现了一个叫做rtl-sdr的实用程序包。这个工具可以运行在Linux系统下,它包含了一个叫做rtl_eeprom的工具,可以将连接到计算机的RTL电视棒的EEPROM数据dump到一个文件中,也可以将修改后的文件写回EEPROM。此工具通过shell操作,命令如下。
CentOS7下安装:
yum install -y rtl-sdr
将数据dump到文件中:
rtl_eeprom -r <文件名>
将文件写入EEPROM中:
(警告:此操作非常危险,写入错误的数据或写入失败损坏数据等意外将导致电视棒无法再次被计算机正常识别!)
rtl_eeprom -w <文件名>
有网帖表示若因写错EEPROM文件导致电视棒无法工作,可尝试用镊子等导电物体短路EEPROM的SDA和SCL引脚,使RTL2832U无法识别EEPROM而直接被识别为PID=2832,然后使用rtl_eeprom工具提供的-g
选项直接生成默认文件。具体参考:rtl_eeprom一文,鄙人未对此方法的有效性做验证。
有了上文的方案,没有烙铁或焊台等工具的CS大佬们便可以尝试不拆硬件修改EEPROM了。
此处附上本人RTL电视棒修改前后的EEPROM中dump到的文件:
本文主要整理了鄙人发现EEPROM中部分数据对电视棒作用的过程,希望本文能对大家有所帮助。
参考:
1:RealTek RTL2832U
linuxtv.org/wiki/index.php/RealTek_RTL2832U
2:WIKI:rtl-sdr
https://osmocom.org/projects/rtl-sdr/wiki/Rtl-sdr
3:rtl-eeprom工具帮助文档
http://manpages.ubuntu.com/manpages/trusty/man1/rtl_eeprom.1.html