Digital TV tuners (DVB-C/T/S) support in ESP32

User avatar
regandgo
Posts: 6
Joined: Sun Jun 18, 2017 7:54 am

Digital TV tuners (DVB-C/T/S) support in ESP32

Postby regandgo » Thu Jan 17, 2019 9:33 pm

Hi,

I am planning to add a Digital TV tuners (DVB) support to the ESP32.
This job may be split in two parts:
1) Tuner-demodulator control using a I2C - It is a trivial task.
2) Transport Stream (TS) capture and demultiplexing. This is the hardest part.

For better understanding, let me put here some background info about the TS.
Usually, the transport stream coming from the tuner-demodulator is a serial bit-stream with a bit rate about 160 Mbps. The transport stream consists of packets. Each packet is 188-byte length.
Each packet starts with a sync byte (0x47) and has a Packet ID (PID) field (13 bit) inside a standard header. Packets with the same PID will form the elementary stream called PES.

The principal objective of the capture task is to store packets with the same PID in the dedicated memory fifo buffer. Thus we will create a PES stream for further processing.
The number of PES and corresponding PIDs should be configured by user. All others packets should be dropped.

So, my questions are:
Does anyone have experience in this matter?
Could someone else share any ideas about such task and how it could be implemented
in esp32 hardware interfaces and DMA?

Thank you for your time.

User avatar
regandgo
Posts: 6
Joined: Sun Jun 18, 2017 7:54 am

Re: Digital TV tuners (DVB-C/T/S) support in ESP32

Postby regandgo » Fri Jan 18, 2019 10:20 am

Sorry guys. I think I should be more specific in my previous post.

Here are some additional points.
1. The main project goal is to capture Stream Information Tables, extract useful info and send it over WiFi to the final user. It could be Program Guide (EPG), NIT info etc. Optionally, if CPU power will permits, audio and video stream could be streamed to user as well.

2. Below is a TS output interface timing diagram for the typical satellite demodulator.
Image

ESP_Sprite
Posts: 9759
Joined: Thu Nov 26, 2015 4:08 am

Re: Digital TV tuners (DVB-C/T/S) support in ESP32

Postby ESP_Sprite » Sat Jan 19, 2019 3:37 am

160MBps over a single line implies a serial clock of 160MHz. I don't think we have anything in the ESP32 that can sample that natively... if any, you'd need external hardware to feed it into the ESP32 at a lower clock rate somehow.

User avatar
regandgo
Posts: 6
Joined: Sun Jun 18, 2017 7:54 am

Re: Digital TV tuners (DVB-C/T/S) support in ESP32

Postby regandgo » Mon Jan 21, 2019 11:37 am

Thank you ESP_Sprite.

160 Mb/sec is a highest bit rate supported by demodulator according to Montage M88DS3103 Data Sheet.

In real life bit rates used by broadcast operators are much lower.
DVB-S2 (Satellite transmission) bit rate depend on particular transponder and can variate from 10 to 65 Mb/sec
DVB-C (Cable transmission), the bit rate can variate from 6,41 to 64.11 Mb/sec
DVB-T2 (Terrestrial transmission) From 7,44 to 50.32 Mb/sec

I saw that ESP32 SPI is able to support clocks up to 80 MHz with 64-byte FIFO
So, does it means, that theoretically ESP32 can handle such bit rates (30-40 Mb/sec) in a slave mode.

Thank you

ESP_Sprite
Posts: 9759
Joined: Thu Nov 26, 2015 4:08 am

Re: Digital TV tuners (DVB-C/T/S) support in ESP32

Postby ESP_Sprite » Tue Jan 22, 2019 1:33 am

Yes, I think that should be doable, given that you use the 'native' SPI pins. On a software level, our slave SPI driver doesn't really support streaming data, however, so you may need to control the SPI hardware yourself. (Probably need it to act more like an I2S peripheral, that is, streaming instead of transaction-based.)

Only issue may be the M_SYNC signal that is used to sync up the bytes: the SPI hardware doesn't have native support for this. With an external flipflop or something, you may be able to convert that into a /CS signal to start the transmission, and hope it stays locked from there. Or maybe just ignore M_SYNC, start on a random bit, and if the incoming stream does not make sense, retry: there's an 1/8th chance you get it right each time.

User avatar
regandgo
Posts: 6
Joined: Sun Jun 18, 2017 7:54 am

Re: Digital TV tuners (DVB-C/T/S) support in ESP32

Postby regandgo » Tue Jan 22, 2019 4:57 pm

Ok, thanks.
Converting M_SYNC to CS signal seems to be a good idea. This probably need a counter to 188 clocks.
But there is also another trouble:
A Hi-speed stream capture process should run without CPU intervention.
Restarting DMA transfer, (considering 2us Interrupt latency) will case a packets lost.
Unfortunately the Esp32 Tech reference doesn't say much about an internal SPI organization, especially when it pared with DMA.
As I understood there is no possibility to continuously run DMA linked list operations in a cyclic loop.
Is it correct?

ESP_Sprite
Posts: 9759
Joined: Thu Nov 26, 2015 4:08 am

Re: Digital TV tuners (DVB-C/T/S) support in ESP32

Postby ESP_Sprite » Wed Jan 23, 2019 2:19 am

Yes, the hardware should be able to do that.

jackbauer
Posts: 6
Joined: Sun May 16, 2021 7:01 pm

Re: Digital TV tuners (DVB-C/T/S) support in ESP32

Postby jackbauer » Fri Dec 10, 2021 11:22 pm

Sorry to revive this old thread, but I'm also interested in this subject. Did you manage to turn your ESP32 into a digital TV tuner?

Who is online

Users browsing this forum: No registered users and 79 guests