PCTV tripleStick (292e) teardown
PCTV tripleStick (292e) |
tripleStick is the latest DVB-T/T2/C stick from PCTV Systems, successor of the old good PCTV nanoStick T2 (290e). It has a little bit better features compared to old nanoStick T2 as nanoStick T2 didn't support officially DVB-C at all, only DVB-T and DVB-T2. Case is just similar and it is hard to distinguish visually between nanoStick T2 and tripleStick. Only differences seems to be colored logo on upper-side and model number (290e vs. 292e) on backside.
That device appeared to market beginning of this year, during January 2014 or so. It replaced rather quickly old nanoStick T2. If you now order nanoStick T2 you will likely get tripleStick as a replacement. nanoStick T2 has been very popular stick among the Linux users as it have been basically the only one DVB-T2 capable stick which works out of the box (I made its driver for Kernel 3.0). My initial plan was not write driver for tripleStick, but I changed my mind after large amount of feedback from users who has ordered old well supported nanoStick T2, but got non-working tripleStick instead. So, I decided to give a try for reverse-engineering that Silicon Labs DTV chipset open.
PCTV Systems has assigned USB ID 2013:025f for that device. Windows driver knows also USB ID 2013:025b for 291e. According to Windows driver tripleStick, 292e, seems to be just renamed 291e for the reason or the other. Stick PCB also has model number 291e printed.
PCTV 292e (291e) |
Initial Linux support will go the Kernel 3.16 if nothing unexpected happens.
Key components:
Empia EM28178
Silicon Labs Si2168
Silicon Labs Si2157
Hardware internals
That device is build to two PCBs, which are attached together like a sandwitch. It is somehow popular construction only for PCTV Systems and Hauppauge devices. Earlier, Pinnacle also used that kind of sandwich construction, maybe its backgrounds are from there, dunno (PCTV Systems was Pinnacle).USB bridge / main PCB
Main PCB |
That is top side of main PCB. Biggest chip clearly visible is EM28178.
PCB printings:
291e Main
2030000-02 LF
pctv systems
Empia EM28178
Empia EM28178 |
Regulator?
regulator? |
Serial eeprom
eeprom I2C bus wires |
serial eeprom |
Demodulator and tuner / tuner PCB
Tuner PCB |
PCB printings:
291e Tuner
20300001-02 LF
pctv systems
Silicon Labs Si2157 & Silicon Labs Si2168
Silicon Labs Si2157 & Silicon Labs Si2168 |
Biggest chip, Si2168, is DVB-T/T2/C demodulator from Silicon Labs. It is the most popular DVB-T2 capable demodulator used for PC TV receivers currently. Demodulator supports also T2-Lite profile (DVB-T2 extension) which is aimed mainly for mobile transmissions, mobile TV and radio.
There is no own crystal for Si2168 (or it is hiding another side of PCB), which means clock is feed via Si2157, saving few components. Demodulator offers gated I2C bus for Si2157 RF tuner, as norm is nowadays. TS interface pins are located mostly left side of the chip. Surprisingly it looks like TS is connected using parallel connection...
Metal box right side of Si2168 is remote controller receiver (IR RX). Weird looking IR component, though. It is connected to EM28178 which decodes IR key codes.
Low-noise amplifier
602 |
Linux driver
There was existing driver for EM28178 USB-bridge, but no driver for Si2168 nor Si2157. Fortunately both Si2168 and Si2157 provided very high level firmware API for device control. That makes protocol reverse-engineering pretty easy.Current driver supports only minimal set of features in order to receive DVB-T/T2/C. There is no signal statistics implemented at all. Power management is also broken, it leaves device full active when device is closed, as it should set tuner and demod sleep. Broken PM is actually Windows driver bug - it is hard reverse-engineer it bug free when sniffs from Windows are already broken. All-in-all, it eats ("only") 210mA from USB when idle and Windows does not behave any better.
Driver can be found from that development tree:
http://git.linuxtv.org/cgit.cgi/anttip/media_tree.git/log/?h=pctv_292e
Si2168 needs firmware, which I named as dvb-demod-si2168-01.fw. Firmware size is only 2720 bytes, meaning it cannot be whole firmware, but a kind of the partial patch.
Firmware can be extracted from the bundled driver CD version 6.4.8.984.
file:
/TVC 6.4.8/Driver/PCTV Empia/emOEM.sys
extract:
dd if=emOEM.sys ibs=1 skip=1089416 count=2720 of=dvb-demod-si2168-01.fw
verify checksum:
md5sum dvb-demod-si2168-01.fw
87c317e0b75ad49c2f2cbf35572a8093 dvb-demod-si2168-01.fw
Reverse-engineering scripts I used to parse I2C demod and tuner I2C traffic are available here. There is also few already parsed sniffs to look example and compare things. These are surely very helpful if you are adding new features or support for new chip revisions / versions.
Hi Antti, would it be possible to provide me with a binary or code for this driver, so I can use the triple stick with Linux. Like, so many others, I bought a nano stick and ended up with the triple stick!. Thanks Gary
ReplyDeleteDriver is included to kernel 3.16 https://www.kernel.org/
DeleteYou could install also media-build http://www.linuxtv.org/wiki/index.php/How_to_Obtain,_Build_and_Install_V4L-DVB_Device_Drivers
Thanks, Antti! I will give that a try.
ReplyDeleteHello Antti, thanks for working on this. The 292e indeed seems to be one of the few affordable, DVB-C capable sticks currently available.
ReplyDeleteI compiled 3.16 rc4 and installed the firmware. dmesg confirms that the stick gets found and firmware loaded.
However, neither tvheadend nor dvbscan find any services for DVB-C. w_scan warns "This dvb driver is *buggy*: the symbol rate limits are undefined - please report to linuxtv.org" but does produce a channel config with sane results.
I'm primarily interested in getting this to work with tvheadend. Any hints?
I should add that tvheadend only reports "status changed to No signal" after tuning to a frequency for scanning. I know that signal strength reporting is not supported. Does it currently report "no signal" or "full signal strength"? Perhaps it needs to be changed to the latter?
Deletedvbscan quits immediately after the initial FE_GET_INFO ioctl, without any output or operation.
It turned out that recompiling tvheadend from source (3.9.1050~g388b4d7) helped. The one I had problems with were the latest upstream binaries (3.4.28~geb79aee~trusty).
ReplyDeleteThe key difference is that the more recent tvheadend lets me choose between DVB-C and DVB-T in the device selection view.
It's working fine now for me. Thanks again.
Hello Antti. Thanks for your work on this. Any idea when HD will be available?
ReplyDeleteHD is working and has been working from the day 1.
DeleteOh I see. Thanks for the reply, must be something I'm doing wrong on my end. Not sure what though, I'll try and find out!
ReplyDeleteCan it be made to work on enigma2?
ReplyDeleteI don't know what enigma2 even is. If it supports any other DVB device via kernel driver then that one should work similarly.
DeleteHi, could you please break down how to install drivers for linux, I am a beginner in Linux.
ReplyDeleteThank you
http://www.linuxtv.org/wiki/index.php/How_to_Obtain,_Build_and_Install_V4L-DVB_Device_Drivers
Deletehttp://palosaari.fi/linux/v4l-dvb/firmware/Si2168/Si2168-B40/d8da7ff67cd56cd8aa4e101aea45e052/
Hi Antti,
ReplyDeleteI have got the 292e up and running using Linux kernel 3.16 on Ubuntu. The only problem is that I have not been able to
tune to DVB-T2 channels using w_scan. I don't think it is any
thing to do with signal strength as i have successfully used a 290e device to tune in to DVB-T2 channels with the same aerial source in the past.
Do you have any suggestions on what i should monitor or
if there are any module settings that I need to be aware
of ?
Thank you.
This comment has been removed by the author.
DeleteI should have added that I have no problems with DVB-T channels on the 292e - It is just the DVB-T2 channels that are not being found.
DeleteThanks.
What is w_scan version?
DeleteHi,
DeleteThe w_scan version is ( 20140727). With this version it finds the the dvb-t2 multiplex during initial scan :-
546000: (time: 05:28.912) signal ok: QAM_AUTO f = 546000 kHz I999B8C999D999T999G999Y999P0 (0:0:0)
QAM_AUTO f = 546000 kHz I999B8C999D999T999G999Y999P0 (0:0:0) : updating transport_stream_id: -> (0:0:16516)
QAM_AUTO f = 546000 kHz I999B8C999D999T999G999Y999P0 (0:0:16516) : updating network_id -> (0:12339:16516)
===================== parse_network_change_notify_descriptor ===========
len = 20
0x00: 07 00 00 10 01 01 DE 47 13 30 00 01 00 00 13 00 : G 0
0x10: 20 05 23 3A : #:
========================================================================
but it cannot tune to report the dvb-t2 channels (the dvb_t channels are reported correctly) :-
...(snip)
tune to: QAM_AUTO f = 546000 kHz I999B999C0D0T2G32Y0P0 (9018:12339:16516) (time: 12:08.389)
----------no signal----------
tune to: QAM_AUTO f = 546000 kHz I999B999C999D0T999G999Y0P0 (9018:12339:16516) (time: 12:13.565) (no signal)
----------no signal----------
...(snip)
It seems to indicate signal strength issues but I know that not to be the case as the dvb-t2 is received successfully by the TV on the same aerial.
Anyway, I would be grateful if have any suggestions on what I should check for.
Thanks.
Is that tune attempt done during same w_scan? It first did scan to find out all multiplexes and then finally tunes every multiplex found in order to find channels?
DeleteFor me that new w_scan works, it finds all the channels (4 DVB-T muxes & 5 DVB-T2 muxes).
For those who had DVB-T2 HD tuning problems see that:
ReplyDeletehttp://blog.palosaari.fi/2014/09/linux-dvb-t2-tuning-problems.html
Hi Antti
DeleteI got the 292e up and running on 3.18.5. As with others DVB-T tunes fine but DVB-T2 doesnt find any channels. Im using w_scan 20140727. Im in the UK and my transmitter is shown as sending DVB-T2.
Ive built drivers from V4LDVB. I also tried to include your patch 27382 but couldnt get it to compile (Error "can't select all drivers at ./build line 490")
Is this patch what I need to get DVB-T2 working? if so whats the easiest way of getting the patched drivers.
Thank you in advance for any help.
on closer inspection w-scan does find the mutliplex with the HD channels and say the signal ok. But when it later tries to tune the channels it says "no signal" .
DeleteIve also now tried with vlc in windows and can get the HD channels to work.
To clarify:
DeleteWill the patch 27382, resolve issues where thehd multiplex is found but then wont tune channels?
If so where / when will the patch be in V4LDVB ?
Patch 27382 (Si2168: increase timeout to fix firmware loading) could fix the issue. I found that from time to time my PCTV 292e fails to tune DVB-T2 channels and that patch fixes it, and due to that I requested that patch to stable kernels too.
DeleteCould you test with VLC?
Open capture device
Capture mode = TV - digital
Delivery system = DVB-T2
Bandwidth = 8 MHz
Transponder/multiplex frequency =
I can get it to work on VLC when using a window laptop. But I get errors when trying to use the ubuntu machine: "dtv access error: cannot access DVR: Permission denied" (Ive tried using root and attempted to check the groups are correct but have fail so far).
DeleteAny idea which kernal the patch is likely to make it into ?
I am getting the same trying to run VLC 2.0.1 on kernel 3.2 with a Hama DTV USB2 Stick (it9135 inside, usb-id: 048d:9135)... :(
DeleteHelp? Pleeeease...
Hello Antti!
ReplyDeleteAs I know, the device works fine with a pure T2-Base signal and a pure T2-Lite signal.
Do you know, does it work with mixed T2-base/lite mode? I mean, is it possible for this demod to get T2-Lite stream from T2-Base FEFs (as implemented in DVB-T2 v1.3.1)?
If yes, does the driver have ability to switch between modulation modes on locked RF-channel? Is there an option, what mode to choose for selected channel?
Guys from Spain, France, Norway, The Netherlands, from Finland too have been trialing mixed T2 mode for two years or more.
Thanks!
Alexander
I don't know very much about Lite nor M-PLP. All live DVB-T2 muxes here in in Oulu Finland, are normal - no M-PLP nor Lite used. Hardware supports those features what Si2168 supports. M-PLP support was added recently to Linux driver. Lite does not likely work without driver changes.
DeleteFinland switched from DVB-H to DVB-T2 few years ago and before DVB-H there was even DAB :) I suspect there isn't currently any T2 Lite trials ongoing. After the death of Nokia's mobile phone business, there is likely not much interest for mobile trials anymore...
Hi!,
ReplyDeleteFantastic work you do!
I have trouble with the dvb-c in sweden, qam256 and 6857 symbol rate.
without ruining with a long post i just link my forum thread:
http://openelec.tv/forum/81-dvb-c-support/73252-dvbc-292e-tvheadend-vdr-addon#119481
Do you have any tip?, I am running OE 4.0.7 and tvheadend 3.4.27
Regards
So w_scan finds all the channels, but you cannot see those?
Deleteyes, the channels.conf output files looks complete. but when i replace the default channels.conf (containing some german channels) and starts the vdr-addon the file goes blanc and no channels.
Deletewould it be possible to somehow edit the annex to enable 6875kbaud for tvheadend?
ReplyDeleteYou have to ask from tvheadend developers. Device seems to work as it finds all the channels.
DeleteHello Antti!
ReplyDeleteFirst of all, thank you for your work!
As you are taken by drivers for to my tuners (si2168, si2157)I thought you mean to most.
I have three pieces Geniatech T230 (http://www.linuxtv.org/wiki/index.php/Geniatech_T230) tuner.
My system: Ubuntu 14.10 minimal 3.19rc6 with fresh media_build, with VLC or Tvheadend+Kodi.
Kernel correctly recognizes my device (but in log dont write firmware version!?).
I Use one tuner at a time, but the problem is same. When I start or switch channel a good chance (75-80%) tuning is wrong and I get continuity counter error in log and picture artifact or green screen or does not. When tuning is good perfect all the next switch. After power on first tuning is always good.
When two client (kodi, vlc) in same multiplex broadcast in, one channel is good, then the other is also good or both are wrong.
What can I do about it?
Thank you in advance for your help!
Is that happening for DVB-T2 channels only? There is bug which causes DVB-T2 tune failure sometimes. Fix is there, but it is not yet in mainline https://patchwork.linuxtv.org/patch/27382/
DeleteSorry, i missed: DVB-C, QAM256, 6875Ks/s, two multiplex (176 and 184 MHz)
DeleteWhat it prints to log when device is plugged and single tuning attempt was done?
Deleteplug in:
Delete[138339.727857] usb 6-4: USB disconnect, device number 3
[138339.785510] dvb-usb: Mygica T230 DVB-T/T2/C successfully deinitialized and disconnected.
[138343.598372] usb 6-4: new high-speed USB device number 4 using ehci-pci
[138343.731288] usb 6-4: New USB device found, idVendor=0572, idProduct=c688
[138343.731304] usb 6-4: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[138343.731313] usb 6-4: Product: USB Stick
[138343.731320] usb 6-4: Manufacturer: Max
[138343.731327] usb 6-4: SerialNumber: 080116
[138343.732780] dvb-usb: found a 'Mygica T230 DVB-T/T2/C' in warm state.
[138343.966711] dvb-usb: will pass the complete MPEG2 transport stream to the software demuxer.
[138343.966896] DVB: registering new adapter (Mygica T230 DVB-T/T2/C)
[138343.979184] i2c i2c-10: Added multiplexed i2c bus 11
[138343.979197] si2168 10-0064: Silicon Labs Si2168 successfully attached
[138343.984213] si2157 11-0060: Silicon Labs Si2147/2148/2157/2158 successfully attached
[138343.984249] usb 6-4: DVB: registering adapter 0 frontend 0 (Silicon Labs Si2168)...
[138343.984870] input: IR-receiver inside an USB DVB receiver as /devices/pci0000:00/0000:00:13.2/usb6/6-4/input/input13
[138343.985130] dvb-usb: schedule remote query interval to 100 msecs.
[138343.985958] dvb-usb: Mygica T230 DVB-T/T2/C successfully initialized and connected.
after tvheadend start:
[138403.203708] si2168 10-0064: found a 'Silicon Labs Si2168' in cold state
[138403.208415] si2168 10-0064: downloading firmware from file 'dvb-demod-si2168-b40-01.fw'
[138403.777133] si2168 10-0064: found a 'Silicon Labs Si2168' in warm state
[138403.786730] si2157 11-0060: found a 'Silicon Labs Si2146/2147/2148/2157/2158' in cold state
[138403.791089] si2157 11-0060: downloading firmware from file 'dvb-tuner-si2158-a20-01.fw'
after start a channel:
[138404.854838] usb 6-4: DVB: adapter 0 frontend 0 frequency 0 out of range (110000000..862000000)
one more comment: In tvheadend FEC is 3/5 this can not be chose, only auto mode work.
I fresh media_build:
Delete[ 909.535726] si2168 2-0064: found a 'Silicon Labs Si2168-B40'
[ 909.535875] si2168 2-0064: downloading firmware from file 'dvb-demod-si2168-b40-01.fw'
[ 910.097852] si2168 2-0064: firmware version: 4.0.4
[ 910.109104] si2157 3-0060: found a 'Silicon Labs Si2148-A20'
[ 910.109288] si2157 3-0060: downloading firmware from file 'dvb-tuner-si2158-a20-01.fw'
[ 911.177370] si2157 3-0060: firmware version: 2.1.6
With new firmware:
Delete[ 1129.547316] si2168 2-0064: downloading firmware from file 'dvb-demod-si2168-b40-01.fw'
[ 1130.332719] si2168 2-0064: firmware version: 4.0.11
[ 1130.344101] si2157 3-0060: found a 'Silicon Labs Si2148-A20'
[ 1130.344238] si2157 3-0060: downloading firmware from file 'dvb-tuner-si2158-a20-01.fw'
[ 1131.411497] si2157 3-0060: firmware version: 2.1.6
It still does not work well even that latest media_build (it is driver having all the fixes) is used?
DeleteSupport for that device was added someone else, IIRC CrazyCat or Olli. Olli has added support for most of the Si2168 devices as well major contributions to driver changes needed. So maybe you should ping those persons for help. I don't have that device. Only Si2168 devices I have are PCTV 290e and new Hauppauge HVR-5525.
OK, thanks for the help!
DeleteWhich kernel versions did https://patchwork.linuxtv.org/patch/27382/ make it into? Is it on the 3.19.y branch yet? Thanks.
ReplyDeleteThe labeling on the regulator IC is clearer on my device. It is an Anpec APW7139, datasheet available from http://www.anpec.com.tw/ashx_prod_file.ashx?prod_id=12&file_path=20100907143900767.pdf&original_name=APW7139.pdf
ReplyDeleteDo you have any plans to implement signal strength reporting or any clues on what mechanism might exist to implement it, is the patch at https://patchwork.linuxtv.org/patch/25821/ all that is needed or is there more work needed after that?
Hi Antti Palosaari
ReplyDeleteDon't know if you can help but I think I have found a bug with DVBLink Server Software when using the 290e and 292e Sticks. If a TV stream is initiated on the host from WMP, WMC, VLC picture is great with no disconnects. If stream is initiated from the web client I get Pixilation (Disconnects) also if stream is initiated from 'Any Remote Client’.
Today I have discovered they have inbuilt Amplifiers so I am guessing when Stream is initiated from Host using WMC, WMP or VLC Amplifier's are automatically switched on. What code is used to initiate the Amps? It seems if initiated by a remote client Amps are not activated! I found out about the amps when installing DistanTV, it gives options to turn amps on, off, or Auto.
Thanks in advance
Yes there is really amplifier on both of those sticks. There is own DVBv5 API call for that amplifier. So application support is needed in order to use it. For example dvbv5-zap --lna=1 enables amp.
DeleteThank you so much :-)
DeleteI will pass the information on.
Here is a video of the problem: https://youtu.be/8eKz1TWaJQs
Hi Again Antti Palosaari
DeleteSo would I be correct is saying: when a ‘Remote’ stream is initiated to the TV Server the Server should send: dvbv5-zap --lna=1 to the relevant stick to ensure Amplifier is initialised?
Thanks again
Sorry, so many questions are coming into my head now.
DeleteHow would I obtain the TV sticks State, to find out if the Amp is on or off. Or could I invoke the amp to the on state?
Would either of the above be possible from command prompt on a Win 7 Machine?
Thanks Again
Hi!
ReplyDeleteusing Kernel 3.16.0-38-generic. The device has been found instantly and w_scan can find it...it doesn't find any channels though...
Tells me at the beginning of the scan that the driver dowsn'T support certaint freq, scans for a while, tells the same thing again, scans the same channels again:
w_scan version 20130331 (compiled for DVB API 5.10)
using settings for GERMANY
DVB cable
DVB-C
scan type CABLE, channellist 7
output format vdr-2.0
output charset 'UTF-8', use -C to override
Info: using DVB adapter auto detection.
/dev/dvb/adapter0/frontend0 -> CABLE "Silicon Labs Si2168": very good :-))
Using CABLE frontend (adapter /dev/dvb/adapter0/frontend0)
-_-_-_-_ Getting frontend capabilities-_-_-_-_
Using DVB API 5.a
frontend 'Silicon Labs Si2168' supports
INVERSION_AUTO
QAM_AUTO
FEC_AUTO
FREQ (110.00MHz ... 862.00MHz)
SRATE (1.000MSym/s ... 7.200MSym/s)
-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
73000: sr6900 (time: 00:00) skipped: (freq 73000000 unsupported by driver)
initial_tune:2271: Setting frontend failed QAM_AUTO f = 73000 kHz S6900C999
sr6875 (time: 00:00) skipped: (freq 73000000 unsupported by driver)
initial_tune:2271: Setting frontend failed QAM_AUTO f = 73000 kHz S6875C999
81000: sr6900 (time: 00:00) skipped: (freq 81000000 unsupported by driver)
initial_tune:2271: Setting frontend failed QAM_AUTO f = 81000 kHz S6900C999
sr6875 (time: 00:00) skipped: (freq 81000000 unsupported by driver)
initial_tune:2271: Setting frontend failed QAM_AUTO f = 81000 kHz S6875C999
113000: sr6900 (time: 00:00) sr6875 (time: 00:03)
.
.
.
858000: sr6900 (time: 06:20) sr6875 (time: 06:23)
Then exactly the same thing again followed by:
ERROR: Sorry - i couldn't get any working frequency/transponder
Nothing to scan!!
I'd be very grateful of any hints...I'm a bit at a loss..never done anything with TV on the PC in Linux..and having a dangerous kind of half-knowledge ;)
Thank you in advance!
Dear everyone,
ReplyDeleteI just bought a PCTV 292e triple stick for my home. I am having problems with the installation and what firmware is available and working for Ubuntu.
Can you please tell me a step by step installation on a new fresh Ubuntu machine, or should I change the operating system, still Linux I prefer. In the end I would like to have both DVB-T and DVB-T2 multiplexes.
Thank you very much.
Best,
John
Is the firmware needed regardless of driver being in 4.1 kernel? w_scan with 292e can't find any transponders/services. I use DVB-C and my other card finds all the transponders and services.
ReplyDeleteMaybe the blue LED switching off shortly after plugging the module into USB indicates the lack of power?
I managed to get it working behind my buggy Belking powered USB hub under Windows but only with DVB-T.
This comment has been removed by the author.
DeleteFor some reasons, it asks for firmware with different filename:
DeleteNov 27 22:02:01 tuli kernel: si2168 12-0064: Direct firmware load for dvb-demod-si2168-b40-01.fw failed with error -2
Nov 27 22:02:01 tuli kernel: si2168 12-0064: Direct firmware load for dvb-demod-si2168-02.fw failed with error -2
Nov 27 22:02:01 tuli kernel: si2168 12-0064: firmware file 'dvb-demod-si2168-02.fw' not found
Nov 27 22:02:01 tuli kernel: si2157 13-0060: firmware version: 3.0.5
Nov 27 22:02:01 tuli kernel: si2168 12-0064: Direct firmware load for dvb-demod-si2168-b40-01.fw failed with error -2
Nov 27 22:02:01 tuli kernel: si2168 12-0064: Direct firmware load for dvb-demod-si2168-02.fw failed with error -2
Nov 27 22:02:01 tuli kernel: si2168 12-0064: firmware file 'dvb-demod-si2168-02.fw' not found
When I rename it to dvb-demod-si2168-02.fw and start the w_scan, PC crashes with kernel panic all the time.
You must install correct firmware
Deletehttp://palosaari.fi/linux/v4l-dvb/firmware/Si2168/Si2168-B40/4.0.11/dvb-demod-si2168-b40-01.fw
Log says you don't have firmware at all.
Hello,
ReplyDeleteI am interested in having my dvb-c cable received through the Silicon Labs Si2168-B40, PCTV tripleStick (292e).
Linux Mint 17.3
Kernel 4.2.0-19 generic
I notice that it was asking for the firmware dvb-demod-si2168-b40-01.fw and dvb-demod-si2168-02.fw and that the firmware available on the supplied CD was dvb-demod-si2168-01.fw.
I found dvb-demod-si2168-b40-01.fw and dvb-demod-si2168-02.fw and copied them on lib/firmware. the result was:
[103217.928771] si2168 1-0064: found a 'Silicon Labs Si2168-B40'
[103217.937066] si2168 1-0064: downloading firmware from file 'dvb-demod-si2168-b40-01.fw'
[103218.142955] si2168 1-0064: firmware version: 4.0.11
[103218.145610] si2157 2-0060: found a 'Silicon Labs Si2157-A30'
[103218.194197] si2157 2-0060: firmware version: 3.0.5
[103250.575843] [UFW BLOCK] IN=eth0 OUT= MAC=01:00:5e:00:00:01:00:24:c9:51:d1:90:08:00 SRC=192.168.1.1 DST=224.0.0.1 LEN=36 TOS=0x08 PREC=0x80 TTL=1 ID=0 DF PROTO=2
then, firmwares installed and pctv recognized.
Then, if I scan I get this result:
ERROR: Sorry - i couldn't get any working frequency/transponder
Nothing to scan!!
I tried everything, I do not know what to do. Any advice?
What is the difference between the two firmware files:
ReplyDeletedvb-demod-si2168-b40-01.fw
dvb-demod-si2168-02.fw
Which one is the best one to use?
Difference is just naming. There is many different revisions of that chip and all uses different firmwares. I made driver first for Si2168-B40 chip version and named firmware as 'dvb-demod-si2168-02.fw'. Later Olli Salonen added support for those older chip versions (A20 and A30) and decided to (re)name firmwares 'dvb-demod-si2168-a20-01.fw', 'dvb-demod-si2168-a30-01.fw' and 'dvb-demod-si2168-b40-01.fw' as different firmware was needed for each chip version.
DeleteDriver still supports for 'dvb-demod-si2168-02.fw' as a fallback in order to avoid regression (it could be think as a regression if driver does not work after the kernel upgrade). If you install only old firmware 'dvb-demod-si2168-02.fw' driver will print notice to system log asking you to install new firmware 'dvb-demod-si2168-b40-01.fw', but it will still work.
There was also firmware named 'dvb-demod-si2168-01.fw', but it is not supported at all. It was initial firmware, but I discovered it was wrong before the first kernel release and replaced it with 'dvb-demod-si2168-02.fw' so that never went to release kernel.
Official firmwares that are supported are:
dvb-demod-si2168-a20-01.fw
dvb-demod-si2168-a30-01.fw
dvb-demod-si2168-b40-01.fw
and all the others are not needed nor should be used.
Hi. I'm trying to get MythBuntu 14.04 (kernel 3.16-30-generic) to work with triplestick 292e (2 off). Recognised, but cannot scan any channels. I'm experienced with PCs (s/w developer) - Windows, but not Linux. I notice you say above f/w needs to be saved in lib/firmware. I currently have those 292e triplesticks also working on a Windows system using Argus TV. Does that f/w get placed into flash in the 292e and will it stop the devices working with the Windows system (I need to keep this working for now), or is it just loaded and discarded on power off, or would it have no effect on Windows operation? Don't want to kill my Windows PVR yet.
DeleteFirmware driver downloads to chip is not stored to chip memory permanently.
DeleteIt is removed from chip memory everytime when device is unplugged and uploaded to chip memory when device is plugged. (Actually there is permanent firmware burned into chip rom and it is only firmware upgrade which is downloaded by the driver - but don't let it confuse things.)
Thanks for your quick reply. I put the file (dvb-demod-si2168-b40-01.fw) in /lib/firmware. However on booting it came up with some error messages that I didn't have time to read. on grepping /var/log/syslog (assume that is the place to look?) for 'dvb' I found entries saying 'dvb-demod-si2168-02.fw not found', Ie different to what I downloaded. Is that a different file I need, or can I just rename it?
DeleteInstall firmware dvb-demod-si2168-02.fw from http://palosaari.fi/linux/v4l-dvb/firmware/Si2168/
DeleteYour kernel is so old that it does not know dvb-demod-si2168-b40-01.fw firmware.
Thanks for your help, got that, now Myth TV finds channels as does scan (downloaded dvb-apps and w-scan). However - no HD channels, either with Myth TV detection or scan. I notice that scan throws out the 't2' line in uk-SandyHeath with 7 'invalid enum values' (don't know why Myth TV didn't find any HD). I also tried 'w_scan -ft -c GB' and that didn't seem to find any HD channels either. Is this likely to be some configuration problem of mine given that I see you say above that HD ought to work, or is it likely to be my 'so old' kernel? There's some stuff elsewhere on the internet that implies there are problems switching between SD and HD on the 292e?
DeleteHi Antti. Helping a friend in Sweden and we are struggling to get an August T210v2/Geniatech T230 to work in TV Headend in OpenElec on a Raspberry Pi with DVB-C. w_scan works fine and scans all the DVB-C channels, but when I add a frequency with the correct QAM and Symbol Rate to TV Headend - it FAILS.
ReplyDeleteError is :
2016-01-24 21:09:22.000 mpegts: 370MHz in BBB - tuning on Silicon Labs Si2168 : DVB-C #0
2016-01-24 21:09:22.000 linuxdvb: Silicon Labs Si2168 : DVB-C #0 - failed to tune [e=Invalid argument]
dmesg | grep dvb output here http://pastebin.com/EhSYcRuG
w_scan -f c -c SE output here http://pastebin.com/Zq5Ah2kV
And we've tried with both 4.0.11 and 4.0.19 firmware for dvb-demod-si2168-b40-01.fw.
Any thoughts?
Device is clearly working as w_scan finds channels. Application is most likely giving some bad parameters to driver and driver discards that bad tuning request.
DeleteThanks Antti. That's what I feared.
DeleteHi Antti, I am running windows 10. Im from the UK and im trying to use the DVB C feature. However when do a channel scan it simply wont pick up any channels even though everything is being recognised. However with my cheap astrometa tuner it picks up everything.. Im I missing something ??
ReplyDeletePart one:
ReplyDeleteHeippa! I am wondering whether you could help me out here. I have been running tvheadend 4.0.7 for six months without any issues on OpenSuse 13.2. Suddenly, after an update, it started having problems. I have narrowed it down to the triplestick as disabling it makes tvheadend run fine. I have two el-cheapo DVB-T sticks also. I have the fw dvb-demod-si2168-02.fw in lib/firmware. Someone in the thveadend forums suggested downloading the B40, 4.0.11 one and renaming, but that does not work. I get the message below:
[ 9.087381] si2168 13-0064: si2168: Silicon Labs Si2168 successfully attached
[ 17.331536] si2168 13-0064: si2168: found a 'Silicon Labs Si2168' in cold state
[ 17.352612] si2168 13-0064: si2168: downloading firmware from file 'dvb-demod-si2168-02.fw'
[ 17.431792] si2168 13-0064: si2168: firmware download failed=-110
When I look at the driver source, it seems as though It should be able to select what fw to download, based on the chip, but mine always pulls down dvb-demod-si2168-02.fw, even if dvb-demod-si2168-b40-01.fw is present.
The link to the thread in the tvheadend forums is here: https://tvheadend.org/boards/5/topics/20547?r=20612#message-20612
What you updated? Kernel? tvheadend? OpenSuse?
DeleteYou should not rename firmwares. It is failing because that old driver does not know newer firmware format.
Part 2:
ReplyDeletelsusb
Bus 002 Device 002: ID 8087:8001 Intel Corp.
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 8087:8009 Intel Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 005: ID 0bda:2838 Realtek Semiconductor Corp. RTL2838 DVB-T
Bus 003 Device 004: ID 2013:025f PCTV Systems
Bus 003 Device 003: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC
Bus 003 Device 007: ID 04d9:1603 Holtek Semiconductor, Inc. Keyboard
Bus 003 Device 006: ID 0bda:2838 Realtek Semiconductor Corp. RTL2838 DVB-T
Bus 003 Device 002: ID 046d:c044 Logitech, Inc. LX3 Optical Mouse
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Part 3 (the interesting part):
ReplyDeleteThe driver version in OpenSuse is old, so I pulled down the most recent I could find from https://github.com/torvalds/linux/tree/master/drivers/media/dvb-frontends.
Put those in a separate dir and created a makefile:
ccflags-y += -I$(srctree)/drivers/media/dvb-core/
ccflags-y += -I$(srctree)/drivers/media/tuners/
obj-m = si2168.o
KVERSION = $(shell uname -r)
all:
make -C /lib/modules/$(KVERSION)/build M=$(PWD) modules
clean:
make -C /lib/modules/$(KVERSION)/build M=$(PWD) cleant
Then make to make si2168.ko. Then copy it:
cp si2168.ko /lib/modules/3.16.7-35-desktop/kernel/drivers/media/dvb-frontends/si2168.ko
Then copy all available fw-files to /lib/firmware, ie:
-rw-r--r-- 1 root root 2728 Oct 28 20:27 /lib/firmware/dvb-demod-si2168-02.fw
-rw-r--r-- 1 root root 28656 Apr 13 22:50 /lib/firmware/dvb-demod-si2168-a20-01.fw
-rw-r--r-- 1 root root 17576 Apr 13 22:50 /lib/firmware/dvb-demod-si2168-a30-01.fw
-rw-r--r-- 1 root root 6919 Apr 10 08:31 /lib/firmware/dvb-demod-si2168-b40-01.fw
Rebooted:
tvburk:~ # dmesg|grep 2168
[ 8.550497] si2168 13-0064: Silicon Labs Si2168 successfully attached
[ 8.559942] usb 3-4: DVB: registering adapter 2 frontend 0 (Silicon Labs Si2168)...
[ 16.739810] si2168 13-0064: found a 'Silicon Labs Si2168-B40'
[ 16.748646] si2168 13-0064: downloading firmware from file 'dvb-demod-si2168-b40-01.fw'
[ 16.950927] si2168 13-0064: firmware version: 4.0.11
But.... linuxdvb: Silicon Labs Si2168 : DVB-C #0 - poll TIMEOUT and no signal
diff /usr/src/linux-3.16.7-29/drivers/media/dvb-frontends/si2168.c /usr/src/linux-3.16.7-35/drivers/media/dvb-frontends/si2168.c
make modules SUBDIRS=drivers/media/dvb-frontends
cp si2168.ko /lib/modules/3.16.7-35-desktop/kernel/drivers/media/dvb-frontends/si2168.ko
Started tvheadend and tried to watch something on DVB-C:
linuxdvb: Silicon Labs Si2168 : DVB-C #0 - poll TIMEOUT
Si2168 driver is clearly upgraded as it downloads that new firmware now. But it cannot still work as there is multiple driver modules needed in order to provide support for that device and now those interfaces between driver modules are out of sync. Now problem is at least si2168 configuration passed from em28xx driver to si2168. There is some config options like TS mode which are added later and as it is wrong it could not work.
DeleteJust upgrade whole kernel, or use media_build in order to build all media driver. Building single modules causes kernel crash sooner or later because kernel internal interfaces are out of sync.
OK. Thanks. Must check with OpenSUSE what kernel has the latest si2168 drivers.
ReplyDeleteLatest kernel has latest drivers. 3.16 you used is oldest and first kernel having si2168 driver at all. Younger kernel the better.
DeleteSadly i still crashes:
DeleteApr 15 19:44:47 tvburk tvheadend[1680]: linuxdvb: Silicon Labs Si2168 : DVB-C #0 - starting 162MHz in MCA
Apr 15 19:44:47 tvburk tvheadend[1680]: mpegts: 162MHz in MCA - tuning on Silicon Labs Si2168 : DVB-C #0
Apr 15 19:44:47 tvburk tvheadend[1680]: service: 3: TV3 si 0xe03b90 Silicon Labs Si2168 : DVB-C #0 weight 0 prio 10 error 0
Apr 15 19:44:48 tvburk kernel: note: tvheadend[1680] exited with preempt_count 1
Yes, I realise that from reading various comments. My system is OpenSuse 13.2 which was considered the "stable" version approx 9 months ago, when I started this project. The new version is "leap" 42.1, Kernel 4.1.12.
ReplyDeleteSo. I guess that upgrading the entire box to leap 42.1, rather than fiddling with media_build and hope that it does not break other things like Oscam :)
Upgraded. Let's see how it goes:
Deletetvburk:~ # uname -a
Linux tvburk 4.1.15-8-default #1 SMP PREEMPT Wed Jan 20 16:41:00 UTC 2016 (0e3b3ab) x86_64 x86_64 x86_64 GNU/Linux
[ 2415.474347] si2168 11-0064: found a 'Silicon Labs Si2168-B40'
[ 2415.547617] si2168 11-0064: downloading firmware from file 'dvb-demod-si2168-b40-01.fw'
[ 2415.794650] si2168 11-0064: firmware version: 4.0.11
[ 2415.798067] si2157 12-0060: found a 'Silicon Labs Si2157-A30'
[ 2415.846615] si2157 12-0060: firmware version: 3.0.5
Interesting, my si2168 (Geniatech T230) started failing recently, too, out of the blue.
ReplyDeleteDuring a scan, after a couple of muxes, it starts showing errors:
eit: invalid checksum (len 407, errors 1)
bat: invalid checksum (len 97, errors 1)
sdt: invalid checksum (len 97, errors 1)
bat: invalid checksum (len 451, errors 1)
pat: invalid checksum (len 96, errors 1)
nit: invalid checksum (len 151, errors 1)
cat: invalid checksum (len 24, errors 1)
bat: invalid checksum (len 146, errors 56)
sdt: invalid checksum (len 146, errors 56)
bat: invalid checksum (len 451, errors 53)
eit: invalid checksum (len 389, errors 286)
pat: invalid checksum (len 96, errors 11)
nit: invalid checksum (len 151, errors 3)
eit: invalid checksum (len 1173, errors 896)
bat: invalid checksum (len 451, errors 93)
bat: invalid checksum (len 146, errors 116)
sdt: invalid checksum (len 146, errors 116)
pat: invalid checksum (len 96, errors 16)
With each new mux the number of errors increases and then after a couple of minutes becomes entirely inaccessible:
linuxdvb: Silicon Labs Si2168 : DVB-C #0 - poll TIMEOUT
Rebooting won't help at this point, I have to disconnect it from the externally powered USB hub to be able to use it again.
Tried various firmware versions (4.0.4, 4.0.11, 4.0.19) for the si2168 and 2.1.6 and 2.1.9 for the si2158, but sadly no luck.
kernel: dvb-usb: found a 'Mygica T230 DVB-T/T2/C' in warm state.
kernel: dvb-usb: will pass the complete MPEG2 transport stream to the software demuxer.
kernel: DVB: registering new adapter (Mygica T230 DVB-T/T2/C)
kernel: si2168 3-0064: Silicon Labs Si2168 successfully attached
kernel: si2157 4-0060: Silicon Labs Si2147/2148/2157/2158 successfully attached
kernel: usb 1-1.3.1.4: DVB: registering adapter 0 frontend 0 (Silicon Labs Si2168)...
kernel: input: IR-receiver inside an USB DVB receiver as /devices/platform/soc/3f980000.usb/usb1/1-1/1-1.3/1-1.3.1/1-1.3.1.4/input/input0
kernel: dvb-usb: schedule remote query interval to 100 msecs.
kernel: dvb-usb: Mygica T230 DVB-T/T2/C successfully initialized and connected.
kernel: usbcore: registered new interface driver dvb_usb_cxusb
tvheadend[427]: scanfile: DVB-T - loaded 44 regions with 1106 networks
tvheadend[427]: scanfile: DVB-S - loaded 1 regions with 113 networks
tvheadend[427]: scanfile: DVB-C - loaded 17 regions with 53 networks
kernel: si2168 3-0064: found a 'Silicon Labs Si2168-B40'
kernel: si2168 3-0064: downloading firmware from file 'dvb-demod-si2168-b40-01.fw'
kernel: si2168 3-0064: firmware version: 4.0.11
kernel: si2157 4-0060: found a 'Silicon Labs Si2148-A20'
kernel: si2157 4-0060: downloading firmware from file 'dvb-tuner-si2158-a20-01.fw'
kernel: si2157 4-0060: firmware version: 2.1.9
kernel: usb 1-1.3.1.4: DVB: adapter 0 frontend 0 frequency 0 out of range (55000000..862000000)
# uname -r -m
4.4.7-3-ARCH armv7l
# tvheadend --version
tvheadend: version 4.0.9
If I disable initial and EPG scans it seems to just work, btw. Only the scans break it. Any idea what might be causing this?
DeleteNo idea and I don't even have that device.
DeleteHi Antti,
ReplyDeleteFirst of all, thank you for your amazing job.
With your first version of the driver, only a firmware was needed for si2168. However in the last version of si2168 and si2157 available in linux-tv sourcetree, we can see that both need a driver (wich comes from the same file dvb-demod-si2168-b40-01.fw).
Why those changes ? Why is it needed now and not before ?
My goal is to make this dongle work with a 3.14 kernel. I intergated the changes you made for the drivers creation (in your sourcetree mentionned above). Everything works fine except that tune doesn't work (w_scan see frequencies but is not able to get the channels inside).
My dongle is rev B4I6.
Thanks a lot for your reply.
Regards,
Thomas
Hi Antti
ReplyDeleteI have just created a fresh install of Mint 18 on my dual boot Mint 17.3 / Mint 18 box. The PCTV 292e Triplestick works fine under 17.3, but nothing under 18. Am using the same firmware on 17 & 18. Firmware recognised in dmesg.
I installed w_scan which shows
claire@cyrus ~ $ w_scan -ft -c GB
w_scan -ft -c GB
w_scan version 20141122 (compiled for DVB API 5.10)
using settings for UNITED KINGDOM
DVB aerial
DVB-T GB
scan type TERRESTRIAL, channellist 6
output format vdr-2.0
WARNING: could not guess your codepage. Falling back to 'UTF-8'
output charset 'UTF-8', use -C to override
Info: using DVB adapter auto detection.
main:3904: FATAL: ***** NO USEABLE TERRESTRIAL CARD FOUND. *****
Please check wether dvb driver is loaded and
verify that no dvb application (i.e. vdr) is running.
Guess the driver is not working? Kernel is 4.4.0-34, different to the 17 kernel which is (I think) 3.something.
Am not very experienced in this line of linux drivers/firmware. What do I have to do to get it working?
Thanks Claire
For anyone finding this post with a similar problem, the (embarrasing) answer is ... user error.
ReplyDeleteI needed to stop the tvheadend service from running [sudo service stop tvheadend] and create a more up-to-date initial scan file using w_scan. Re-start tvheadend, then the services started slowly coming in.
I must have done this last time I installed a tuner, but forgot to write it down....doh!
Hi Antti, just a thank you! I bought a PCTV 292e last year but on Debian Stable I could only get it to grab SD and Radio. I just tried it again this week on Debian Testing and it is great (my device is recognised as Silicon Labs Si2168-B40 and I use firmware dvb-demod-si2168-b40-01.fw). I get all the HD and SD and Radio channels here (150 in total) and it grabs/serves even HD very easily on an old 1.6GHz 64-bit Intel Atom based Eee PC acting as a TV server with tvheadend serving the channels to my LAN.
ReplyDeleteSo, thanks for all your work in getting these devices functional in free OS.
Hi,
ReplyDeleteDoes anyone has a sample dts configuration for Si2168/Si2141 for linux? I appreciate any pointers on this. I could able to run the driver probe with minimal configuration in dts but I am not sure how to provide all other details in dts file.
God I wish I was as talented as you!!!
ReplyDeleteThanks for your efforts...