logo elektroda
logo elektroda
X
logo elektroda

Inside the UE55MU6452U big screen TV, analysis, decoding and flash simulation for the agent

p.kaczmarek2 1947 15

TL;DR

  • Inspects the Samsung UE55MU6452U 55" 4K UHD Smart TV, focusing on its T-Con board, main board, backlight module, and both onboard Flash memories.
  • Decodes the T-Con flash by 32-bit byte-swapping the dump, revealing ARM Cortex-M0 firmware, multitasking traces, debug strings, and UART support.
  • Identifies UART_TX_DATA at 0x009D0E20 and other registers, then uses Capstone and Unicorn to emulate the firmware and capture a boot log.
  • The emulated boot output shows UART RDY, timestamp 20170825_0922, warm booting, USIT mode, and PMIC write, confirming the register map.
  • The second 25Q40CLSIP Flash contains initialization code for I2C, HDMI-CEC, ADC, and microcontroller communication, not a BIOS.
Generated by the language model.
ADVERTISEMENT
This content has been translated flag-pl » flag-en View the original version here
📢 Listen (AI):
  • Inside the UE55MU6452U big screen TV, analysis, decoding and flash simulation for the agent
    Ever wondered what sits in the Flash memory from a modern TV? I invite you to a short presentation of the inside of the Samsung UE55MU6452U 55" 4K UHD Smart TV combined with reverse engineering and emulation of the T-Con controller firmware. Here I will show how such a TV is built, how its backlighting is realised and what components can be recovered from inside. Finally, I will also try to rip the contents of the Flash memory from inside, decode it properly, determine its architecture, UART addresses and fire it up in a simple emulator.

    Disassembly and backlighting
    I started the disassembly with the screen itself. In LCD TVs, the image is generated by the liquid crystal matrix, while the backlighting is a separate module behind it. This used to be implemented using CCFL fluorescent tubes, but now we have LED TVs. The LED strip is only on the bottom edge of this unit, but their light passes through several layers of diffusers and diffuser films that evenly illuminate the entire panel surface.
    Inside the UE55MU6452U big screen TV, analysis, decoding and flash simulation for the agent Inside the UE55MU6452U big screen TV, analysis, decoding and flash simulation for the agent Inside the UE55MU6452U big screen TV, analysis, decoding and flash simulation for the agent
    With the back cover removed, you can see the two main modules of the TV - the power supply and the motherboard. There are also, of course, the speakers.

    Power supply L55E6R_KHS
    The power supply is essentially built from two modules. Here we have a separate power supply for the motherboard, in this case 12.8 V at just over 5 A, and separately we have a constant-current power supply for the LED backlight, depending on the version this can be 198 V 370 mA at 300 Hz.
    Inside the UE55MU6452U big screen TV, analysis, decoding and flash simulation for the agent Inside the UE55MU6452U big screen TV, analysis, decoding and flash simulation for the agent
    These types of power supplies are usually single-sided boards. Some of the components, especially the larger ones, are threaded and some, including the ICs, are SMT. Interestingly, the pulse transformers and the 400 V capacitor have been specially mounted in the PCB cutouts to reduce the height of the PCB.
    Inside the UE55MU6452U big screen TV, analysis, decoding and flash simulation for the agent Inside the UE55MU6452U big screen TV, analysis, decoding and flash simulation for the agent Inside the UE55MU6452U big screen TV, analysis, decoding and flash simulation for the agent Inside the UE55MU6452U big screen TV, analysis, decoding and flash simulation for the agent
    Of the components here, we have 10N60M2 MOSFETs, 60S380CE transistors and U10A6C1 ultrafast diodes.



    Mainboard
    The motherboard is realised using surface mount. The PCB is double-sided, but the components are only on the top. What we have here is essentially a small computer, complete with processor, memories, inverter and I/O section.
    Inside the UE55MU6452U big screen TV, analysis, decoding and flash simulation for the agent Inside the UE55MU6452U big screen TV, analysis, decoding and flash simulation for the agent
    The loudspeakers are driven by a TAS5749M class-D audio amplifier:
    Inside the UE55MU6452U big screen TV, analysis, decoding and flash simulation for the agent
    With the heatsink removed:
    Inside the UE55MU6452U big screen TV, analysis, decoding and flash simulation for the agent
    Components such as the CPU, RAM and Flash are already assembled using BGA (Ball Grid Array) technology. This provides higher interconnect packing density, better electrical properties and a more compact chip design, while unfortunately making manual repair and soldering of these components more difficult.
    Inside the UE55MU6452U big screen TV, analysis, decoding and flash simulation for the agent
    After cleaning the paste, the CPU can be identified - SDP1601 ver. 05:
    Inside the UE55MU6452U big screen TV, analysis, decoding and flash simulation for the agent
    I couldn't find any information about it on the web, except for a wikimedia page with a gallery from a rather similar TV:
    https://commons.wikimedia.org/wiki/File:Samsu...E40MU6409U_-_board_-_Samsung_SDP1601-5286.jpg


    Flash memory from T-Con?
    The T-Con (Timing Controller) is the controller that controls the LCD matrix and is responsible, among other things, for generating control signals for the pixels. The first bone of the 25Q80DVSIG is located at the edge of the PCB. Its SPI line leads to the pads from the missing connector.
    Inside the UE55MU6452U big screen TV, analysis, decoding and flash simulation for the agent
    The data entropy is quite high, but only up to offset 0x19000. Beyond that, the memory is empty.
    Here I've already found some interesting sections that look like subtitles, but in some strange language. Or maybe something is messed up?
    Inside the UE55MU6452U big screen TV, analysis, decoding and flash simulation for the agent
    A quick analysis of the letters shows that we have the byte order changed. I have given examples to confirm my idea in the table:
    Rough (as in file) Decoded (32-bit byte-swap)
    locnIcerrhc tskce Incorrect checksum
    oB dnito!! g Booting!!!
    CIMPATS_ER_TT_DA_EPYS SYS_TYPE_AD_TT_RE_STAM PIC
    NOCTamI I eg ofns% TCON Image Info sd%

    I made a program to flip all the bytes:
    Code: Python
    Log in, to see the code

    In the subtitles I found information about the processor - aeabi Cortex-M0. In addition, there are a lot of error messages, about Flash memory and about T-Con:
    
    0x00884F:  Current Task ID : %d, BaseSP:0x%08x, SP:0x%08x, Name:%s
    0x008889: [Task %02d] BaseSP:0x%08x, SP:0x%08x,StkSize:Assert Remain:[%06d][%06d], ID:%02d, Name:%s
    0x0088E4: -----------------------------------------------------------
    0x008921: Oops!!! HardFault_Handler
    0x00893C: TIME : Preempt : %d us, OneCmd Op :%d us
    0x00899A: OutPut Hz : 
    0x0089A7: 60 Hz 
    0x0089AF: 120 Hz 
    0x0089B8: idle
    0x0089BD: user_debug
    0x0089C8: usr_boot_main
    0x0089D6: Enter Multi Tasking
    0x0089EB: UART RDY
    0x0089F5: TIMESTAMP : %s
    0x008A05: 20170825_0922
    0x008A13: I2C M Init
    0x008A1F: sf_wp_check
    0x008A2C: MEMIF_CMD_SRAM_REFLASH
    0x008A44: Current Version : 0x%02X
    0x008A5E: Release Date : 0x%06X
    0x00AFDC: ----------FGT Status Information---------
    0x00B007: init_skip : 0x%04x
    0x00B01B: fw_model : 0x%04x
    0x00B02E: test_mode : 0x%04x
    0x00B042: chip_ids : 0x%04x
    0x00B055: chip_corner : 0x%04x
    0x00B06B: chip_revision : 0x%04x
    0x00B083: booting_done : 0x%04x
    0x00B19C: Source Address : 0x%08x
    0x00B1B5: Err Size:0x%x
    0x00B1C4: Header CRC : 0x%x, Result CRC Val:0x%x
    

    It also looks like there is a command line:
    
    
    [inContentAd]
    
    0x00B40D:  Input 1. Register, 2. Print list, 3. Select Remove Register, 4. All Remove Register, 5. Trace Start, 99.Exit : 
    0x00B47E: Full!!!
    0x00B487: Register Address[%d] : 
    0x00B49F: [%02d] Addr:0x%08x, Val:0x%08x
    0x00B4BF: Remove Line : 
    0x00B4CE: Select [ 1.Debug Buffer Mode] or[ 2. Print Mode] ??? : 
    0x00B506: Stop!!!
    0x00B50F: [%08d]Temperature : %d'C
    0x00B529: [Test] 1: Trace OneCommand Toggle
    0x00B54C: [Test] 2: UART ReInit
    0x00B563: [Test] 3: Access Address
    0x00B57D: [Test] 4: Trace Address
    0x00B596: [Test] 5: manual onecmd
    0x00B5AF: [Test] 6: DBG Buffer Mode
    0x00B5CA: [Test] 7: Force Booting Done
    0x00B5E8: [Test] 8: OSD Image
    0x00B5FD: [Test] 9: DDR RW Limit Check
    0x00B61B: [Test] 10: IDLE Task Monitoring On/Off
    0x00B643: [Test] 11: SPI Flash RW Limit Check
    0x00B668: [Test] 15: 3DC 60
    0x00B67B: [Test] 17: TCON CRC 
    0x00B691: [Test] 18: EW DDR Test 
    0x00B6AA: [Test] 19: Temperature Test 
    0x00B6C8: [Test] 98 : FT Status Info
    0x00B6E4: [Test] 99 : Exit
    0x00B6F6: [Test] Input : 
    

    Various types of Flash are supported:
    
    
    0x00B730: w25x10
    0x00B768: w25x20
    0x00B7A0: w25x40
    0x00B7D8: w25x80
    0x00B810: w25q80
    0x00B848: w25x16
    0x00B880: w25q16
    0x00B8B8: w25x32
    0x00B8F0: w25q32
    0x00B928: w25x64
    0x00B960: w25q64
    0x00B998: w25q32
    0x00B9D0: w25q64
    0x00BA08: gd25q32c
    0x00BA40: gd25q32c
    0x00BB94: SF[%d]:%s, JEDEC ID : 0x%x, 
    0x00BBB1: Quad Mode
    0x00BBBC: Single Mode
    0x00BBC9: SF[%d]: No Exist : 0x%08x
    

    What is Demura? Demura is an LCD matrix calibration technique that compensates for brightness and colour imbalances between individual pixels. The correction data is usually stored as LUT arrays.
    
    0x014DF6: Fail / Retry 
    0x014E04: TCON Demura Register Data Uploading 
    0x014E29: fail - Incorrect checksum / Read : 0x%X / Calc : 0x%X
    0x014E60: TCON Demura LUT Data Uploading 
    0x014E80: fail - Incorrect checksum / Read : 0x%x / Calc : 0x%x
    0x014EB7: ACC FCnt Init 
    0x014EC6: Demura bypass
    0x014ED5: No Demura Image
    0x014EE7: Write Fcnt ISR Routine
    0x014EFF: M49B6U0Fxx
    

    LUT? Lookup table? But what is an SDC? Is it about colour mapping?
    
    0x015201: 120Hz Vx1 Mode
    0x015211: TCON RDY
    0x01521B: Tcon Init(us): %d
    0x01522E: DCC/VCC/VA Init(us): %d
    0x015247: ACC 
    0x01524C: ACC Init(us): %d
    0x01525E: SDC Post LUT Uploading 
    0x015278: SDC Post LUT Uploading fail
    0x015294: SDC Pre LUT Uploading 
    0x0152AD: SDC Pre LUT no.%d Uploading fail
    0x0152CE: SDC IP Init(us): %d
    0x0152E3: accept from FRC
    0x0152F4: Demura Init(us): %d
    



    Flash memory from T-Con - part 2 - analysing and determining UART registers
    I loaded the Flash into Ghidr, used the ARM:LE:32:Cortex settings. The instructions and functions are decoded correctly.
    Inside the UE55MU6452U big screen TV, analysis, decoding and flash simulation for the agent
    You can quickly find there references to subtitles, for example to UART_RDY, in the screenshot below we have the ldr instruction which loads a pointer to this subtitle, just after that the 74f8 function is called. I wonder what it can do with this write....
    Inside the UE55MU6452U big screen TV, analysis, decoding and flash simulation for the agent
    A first glance doesn't explain it yet, but let's not give up:
    Inside the UE55MU6452U big screen TV, analysis, decoding and flash simulation for the agent
    One of the subfunctions looks like an iteration of a null-terminated byte:
    Inside the UE55MU6452U big screen TV, analysis, decoding and flash simulation for the agent
    Each character is processed by another routine, which first seems to wait in a loop until the UART is free, and then sends one byte:
    Inside the UE55MU6452U big screen TV, analysis, decoding and flash simulation for the agent
    FUN_00004d60 just examines lighting the third bit on the value with address DAT_00004d6c. Ready flag? Whereas something writes to the value with DAT_00004de0.... but DAT_00004de0 is a pointer, what is there in memory?
    Inside the UE55MU6452U big screen TV, analysis, decoding and flash simulation for the agent
    There is the address of the UART_TX_DATA register there, that is 0x009D0E20! It is this register that continues to send characters. Similarly, the other registers can be specified:
    - 0x009D0E00 = UART_CTRL (on/off, value 0x3)
    - 0x009D0E04 = UART_BAUD (baud, value 0x3085)
    - 0x009D0E10 = UART_STATUS (bit 2 = TX ready)
    - 0x009D0E20 = UART_TX_DATA (byte to be sent)
    - 0x009D0E28 = UART_FIFO_CFG (FIFO depth 0x50?)
    The correctness of this can only be verified.

    Flash memory from T-Con - part 3 - emulation
    Finally, I prepared a simple emulator PoC (Proof of concept) in Capstone deassembler and Unicorn emulator in Python. In addition, the whole thing emulates basic peripherals and has patches for some instructions. I captured operations on the extracted UART registers. The result is the following boot log:
    
      Captured output (237 bytes):
      â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€
    UART RDY
    TIMESTAMP : 20170825_0922
    #I2C M Init
    .SF[0]: No Exist : 0x00000000
    KTCON Image Info : M55A6U1F20
    hTCON Register LUT uploading done
    Warm Booting !!!!!
    USIT En!
    60Hz USIT Mode
    USIT Phy 0 Init done
    USIT Phy 1 Init done
    PMIC Write
      â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€
    

    This confirms the identification of the registers and gives hope that, after compiling the firmware ourselves, we would also be able to display text.


    Flash memory at the CPU
    The second Flash memory found is located right next to the CPU. Its designation is 25Q40CLSIP, from which its size can be deduced: 512 KB. I was betting that here, as on the PC, sits some BIOS.
    Inside the UE55MU6452U big screen TV, analysis, decoding and flash simulation for the agent
    I desoldered and ripped it down using CH341:
    Inside the UE55MU6452U big screen TV, analysis, decoding and flash simulation for the agent
    I started with an entropy analysis. Entropy is a measure of the disorderliness of data - the higher it is, the more random the bits in memory are. In the context of flash memory, it allows you to quickly assess which bits are ordered and which bits contain random or compressed data.
    Inside the UE55MU6452U big screen TV, analysis, decoding and flash simulation for the agent
    Here, too, the subtitles are rearranged:
    Inside the UE55MU6452U big screen TV, analysis, decoding and flash simulation for the agent
    You can quickly find interesting identifiers. Compilation date:
    
    Image Info: Ver: %04 Build Date:  %s[%s] - e
    Date: Sep 25, 2017  Time: 6:07:12
    

    I2C bus:
    
    I2C CHAN%d: FIFO CTR=0x%08x, DBG=0x%08x, DATA=0x%08x, STA=0x%08x
    I2C CHAN%d: CORE CON=0x%03x, STAT=0x%02x, ADDR=0x%02x, DS=0x%02x, CONE=0x%02x
    I2C CHAN%d: INTR PEND=0x%02x, MAS ENK(=0x%02x)
    I2C CHAN%d: P%d.SCL(%d) direction=%s, len=, level=
    I2C CHAN%d: P%d.SDA(%d) direction=%s, len=, level=
    

    HDMI (Consumer Electronics Control) CEC controller:
    
    RX_ERROR Pend 0! a:
    RX_ERROR FIFO Flush O Fl timeout!
    RX_NACK Pend 0! a:
    RX_NACK FIFO Flush O Fl timeout!
    CEC CHANGE: %dLine%d(P)%d.direction=%level, s
    

    ADC messages:
    
    ASR: ADC%d not EOC pending%d
    A!: ADC%d not interrupt pending! 0x%x%s
    [%ums]: ADC%ld %ums Timeout! EOC(0x%08x, INT 0x%08x) %s
    AD: value C0 0x%
    ADC value 1 0x%0
    ADC2 value 0 0x%08xS: %s
    

    MiCom - communication with the microcontroller?
    
    MiCom ON Assign not ready already own . 0x
    ResetMasterWait: %s timeout! wait count %unt %is
    od: as already assigned not AON Mic . om 0x%x%s
    ow: gen timeout %l(t)suu 0x!
    

    Here too everything loads nicely into Ghidr when ARM Cortex mode is selected, Little Endian byte order. I also reverse the words beforehand so that the subtitles look correct:
    Inside the UE55MU6452U big screen TV, analysis, decoding and flash simulation for the agent
    The more important functions are even more eye-catching. Let's take a look at this random code snippet for example - what is FUN_00010068?
    Inside the UE55MU6452U big screen TV, analysis, decoding and flash simulation for the agent
    It's probably displaying error messages, the argument is a Flash write:
    Inside the UE55MU6452U big screen TV, analysis, decoding and flash simulation for the agent

    Third Flash memory
    Finally, a little curiosity - there was also a memory bone on the matrix itself, but I did not keep it after disassembly and did not examine its contents. I need to do this on my next TV:
    Inside the UE55MU6452U big screen TV, analysis, decoding and flash simulation for the agent Inside the UE55MU6452U big screen TV, analysis, decoding and flash simulation for the agent



    Summary
    What a surprise, this was supposed to be a presentation of the inside of a TV, and along the way it turned into attempts to reverse-engineer flash memory from TCON. In a similar way, it also managed to slightly decode the other memory, the one around the CPU. Both were characterised by byte reversals in the words, as could be seen from the various messages left behind. After performing a simple 32-bit byte-swap, the words in the memory began to arrange themselves into intelligible texts, which made firmware analysis much easier. This made it possible to establish that the T-Con controller uses an ARM Cortex-M0 processor and to identify parts of the multitasking system and UART support. The code analysis also identified the addresses of the UART registers, making it possible to create a simple Proof-of-Concept emulator that can capture the firmware boot log. The second Flash memory, the one next to the CPU, I spent slightly less time on, but it looks like a small initialisation firmware. In its contents you can find support for various peripherals such as I2C, HDMI-CEC or ADC, as well as communication with an additional microcontroller. It is not, however, a BIOS.
    Ultimately, it turns out that even individual TV modules have their own microcontrollers and firmware, which can be analysed just like other embedded systems. Even a simple analysis of the binaries can reveal quite a lot of information about the operation of the entire device.
    The results are quite encouraging and give hope, in a way, for compiling and running one's own programme on this type of chip. Even a simple LED flashing classic would be enough to start with, although analysis of the UART also gives hope of displaying custom messages. Perhaps I will also attempt such a thing, although I admit that I must first find a board where the clip from CH341 works, or find a way to program without dumping the memory, because, however, repeatedly re-soldering circuits somewhat increases the time-consumption of such a game.
    I don't know how much I'll divide myself yet in the context of this particular board, but I already have a few others in stock, complete and working, from smash-and-grab TVs, and there I've determined that there is room for experimentation.
    Will it be possible to turn a TV into an Arduino? We will find out soon enough!

    Cool? Ranking DIY
    Helpful post? Buy me a coffee.
    About Author
    p.kaczmarek2
    Moderator Smart Home
    Offline 
    p.kaczmarek2 wrote 14459 posts with rating 12468, helped 650 times. Been with us since 2014 year.
  • ADVERTISEMENT
  • #2 21896847
    maciej_333
    Level 38  
    Posts: 4217
    Help: 486
    Rate: 1577
    On what circuit is the head i.e. the RF module? Can you see it in one of the photos?
  • #3 21896929
    p.kaczmarek2
    Moderator Smart Home
    Posts: 14459
    Help: 650
    Rate: 12468
    Are you thinking of any RF project?
    Inside the UE55MU6452U big screen TV, analysis, decoding and flash simulation for the agent Close-up of an RF module on a PCB with a metal shield and coaxial connectors

    I also have more interesting layouts with RF modules
    Helpful post? Buy me a coffee.
  • #4 21897527
    maciej_333
    Level 38  
    Posts: 4217
    Help: 486
    Rate: 1577
    Unfortunately, I have not been able to find even the slightest mention of these circuits. It's a pity, because there are even connectors - probably for testing through which it would probably be possible to do something with the RF module.

    p.kaczmarek2 wrote:
    Are you thinking about some RF project?

    Basically I have managed to run from such chips so far MxL5007 and AV2012. There are no datasheets for these. There is always some potential to do SDR on some larger STM32. They are cheap - even chips as big as the STM32H755.

    Interesting analysis. Too bad there is a lack of documentation for such chips. Many interesting projects could be done on this. What remains is possibly reverse engineering.
  • ADVERTISEMENT
  • #5 21897529
    p.kaczmarek2
    Moderator Smart Home
    Posts: 14459
    Help: 650
    Rate: 12468
    I'm most limited for now by this flashing slow, in the sense, in the circuit to me CH341 doesn't want to catch in most cases. I don't know if I won't think about some combination like a custom board with electronic disconnection of the SPI from the memory to be able to flash automatically.

    Are you still looking around for this type of part? I remember you wrote about this in the past. I'll post what I've got here, let me know if anything would be of use to you, as I'll be clearing out the garage again soon and some of the boards will go to PSZOK.

    Something on the Si2110-FM with the STi5107KYA Omega CPU - I've rejected this for fun because of the uncool Flash format:
    Inside the UE55MU6452U big screen TV, analysis, decoding and flash simulation for the agent Inside the UE55MU6452U big screen TV, analysis, decoding and flash simulation for the agent

    D61216GJ of 241113A:
    Inside the UE55MU6452U big screen TV, analysis, decoding and flash simulation for the agent Green PCB with ICs, a coaxial connector, and several AV ports on a white background

    With TV something XEIVE XC5000ACQ:
    Close-up of a PCB with RCA jacks and a XEIVE XC5000ACQ chip plus two 47 µF 16V capacitors Green TV mainboard PCB with HDMI, VGA, SCART, RCA, USB ports and a coax antenna connector

    Something IX2360VA:
    Close-up of a green PCB in a metal housing with an IX2360VA chip and a pin header connector Green main PCB with ICs, connectors, and a large capacitor on the right side
    Helpful post? Buy me a coffee.
  • #6 21897585
    maciej_333
    Level 38  
    Posts: 4217
    Help: 486
    Rate: 1577
    The Si2110-FM gives MPEG-TS as its output. There is even a whole datasheet. In theory, you could cut it off from the CPU and hook it up to a Rapsberry PI to program it via I2C and decode MPEG-TS. In this way, say, it would be possible to make your own DVB-S tuner. However, the fun is quite heavy and I don't know how much sense it makes.

    The IX2360VA is from a DVB-S tuner and has IQ outputs. However, there is nothing else about it.

    There is even a driver for the XC5000ACQ: Link . There's also a block diagram for this:
    Block diagram of XC5000 showing RF chain, DSP, and outputs labeled DTVp and DTVn
    It would appear that this is not a very interesting circuit. Maybe something further can be done with the DTVn SIF output, but I don't see the potential.

    I couldn't find anything about the rest. So I thank you for the pictures, but just in these boards I don't see the potential to do something.
  • #7 21897846
    p.kaczmarek2
    Moderator Smart Home
    Posts: 14459
    Help: 650
    Rate: 12468
    And roughly what kind of layouts are you looking for?

    Going back a bit more to the topic from the first post, I've been investigating another TV board, this time from Manta - the LED4004, and there at the main processor, even though it's not a smart TV, it just sits Linux with the SquashFS file system, the !/bin/sh scripts can be extracted. The next patient to analyse will be.
    Helpful post? Buy me a coffee.
  • #8 21898091
    maciej_333
    Level 38  
    Posts: 4217
    Help: 486
    Rate: 1577
    p.kaczmarek2 wrote:
    And roughly what circuits are you looking for?

    It could be something that has a "normal" p.h. output like the R820T, or the MxL5007 (a very good chip) or a "zero IF", or IQ like the AV2012. The circuits can be with DVB-T/C and DVB-S. There is a list of various interesting circuits on the left.
  • ADVERTISEMENT
  • #9 21898613
    gregor124
    Level 28  
    Posts: 1493
    Help: 93
    Rate: 811
    These bytes inverted in a 32-bit word are the so-called Endiannes (byte order), this has a historical significance and in principle 2 encodings Little-Endian and Big-endian are used in different processors.
    ARM processors can work in both systems, except that those up to I think ver. 5 had the encoding given at the production stage (the choice was up to the orderer), in later ones (not all) this encoding can be changed programmatically.
    In any case, on ARMs it is very easy to recode this data using a single assembler instruction , which recodes the data both ways:
    REV Rd,Rn


    Big-Endian is used by most modern processors, while Little-Endian was used by PDP and VAX computers.
    In ARM, I think it is only Samsung that uses Little-Endian.
    Helpful post? Buy me a coffee.
  • #10 21898634
    p.kaczmarek2
    Moderator Smart Home
    Posts: 14459
    Help: 650
    Rate: 12468
    Apparently I've known about Endiannes for a long time, on various systems even when serialising files I've had to invert bytes of integer/float types, just as in Ghidra I set this when decoding instructions, but.... somehow I haven't encountered that this also applies to strings - single-byte char strings - before. But maybe it's a matter of me having dealt with C and C++ topics a lot outside of microcontrollers and not paying attention to this.
    Helpful post? Buy me a coffee.
  • #11 21898676
    gregor124
    Level 28  
    Posts: 1493
    Help: 93
    Rate: 811
    >>21898634
    This was actually invisible to the programmers or operators of the computer in question. The problem arose from the technical way in which memory was attached to the processor, if the processor operated on a word wider than a byte.
    For the operator, it was irrelevant, because, reading the memory byte by byte, using, for example, a software monitor, he got the data in the same order.
    Ba, even transferring them to the processor registers, they were technically automatically set the same in both systems, i.e. the highest bit was the sign bit for the word regardless of which byte was physically in memory.
    Interestingly, for parallel processing systems this order is virtually irrelevant, but for processors having serial buses Big-Endian is pretty much the only sensible choice.
    Anyway, in binary arithmetic, we generally process data from the lowest bit to the highest.
    The Little-Endian system was more commonly used in computers of the past, and the Big-Endian was introduced by Intel in the 8008 processor and has stayed that way since, in fact, the 8008 and 8080 processor had an architecture designed for/by Computer Terminal Corporation for their Datapoint 2200 terminal, which was a computer with a serial architecture.
    Later, Big-Endian basically found its way into most processors.
    The functionality of the Bi-Endian in ARMs in turn is very helpful for creating any ;) emulators.
    ARMs still have the REV16 instruction, which in turn is useful for emulating some 16-bit systems, reversing bytes in 2 16-bit words.


    Diagram comparing big-endian and little-endian byte order for 0x12345678 in memory
    Helpful post? Buy me a coffee.
  • #12 21898864
    BOOM i ZONK
    Level 22  
    Posts: 595
    Help: 20
    Rate: 72
    @p.kaczmarek2 On the board you still have the eMMC memory where the whole OS sits. I've seen 4Gb and 8Gb sizes of these memories on Samsungs. If you are stubborn you can read them in the SD card reader.
  • ADVERTISEMENT
  • #13 21905161
    E8600
    Level 41  
    Posts: 8874
    Help: 525
    Rate: 2476
    BOOM i ZONK wrote:
    If you are stubborn, you can read them in the SD card reader.

    Has a colleague tested this method or just watched others succeed? Fortunately, china already offers very cheap modules dedicated under eMMC literally in the price of an SD reader and you do not need to buy an expensive programmer.
  • #14 21905187
    BOOM i ZONK
    Level 22  
    Posts: 595
    Help: 20
    Rate: 72
    E8600 wrote:
    Tested this method by a colleague


    Yes, I confirm it works, but.... not with all readers. Of the four I had at the time, only one worked, it was probably a GL838 ripped out of some printer.
  • #15 21905232
    saly
    Level 32  
    Posts: 3231
    Help: 89
    Rate: 992
    Very interesting post. Thanks for such analysis and reverse engineering, description of methods. It is helpful. Great job and a piece of work you've done, it's clear t.v. like t.v., but exploring the topic and showing it off is a no brainer.
  • #16 21905274
    linuxtorpeda
    Level 26  
    Posts: 824
    Help: 93
    Rate: 295
    I look forward to a more in-depth analysis of the firmware. I know manual analysis is tedious work, but have you tried to identify features with known signatures? Or even better - use the GhidrAssist plugin and let LLM do the analysis? In agent mode, AI works virtually unattended.
📢 Listen (AI):

FAQ

TL;DR: For TV reverse engineers, this FAQ explains a 55-inch 4K Samsung set and shows why “UART RDY” matters: the thread maps internal boards, decodes byte-swapped SPI dumps, identifies T-Con UART registers, and validates them with a Python emulator that captures a 237-byte boot log. [#21896757]

Why it matters: It turns a teardown into a repeatable workflow for extracting, decoding, and emulating hidden firmware inside a modern Samsung LCD TV.

Element T-Con SPI Flash CPU-side SPI Flash
Chip seen in thread 25Q80DVSIG 25Q40CLSIP
Approx. capacity 8 Mbit 512 KB
Main role inferred Panel/T-Con control firmware Early init/support firmware
Clues found Cortex-M0, UART, Demura, LUT, boot log I2C, HDMI-CEC, ADC, MiCom strings

Key insight: The decisive trick was a 32-bit byte-swap. Once the words were reordered, unreadable dumps turned into ARM Cortex-M0 code, readable debug strings, and a boot log that could be emulated offline. [#21896757]

Quick Facts

  • The L55E6R_KHS power board provides 12.8 V at just over 5 A for the main board, plus an LED backlight supply rated 198 V, 370 mA, 300 Hz in one version. [#21896757]
  • The T-Con dump contained meaningful data only to about offset 0x19000; beyond that, the author reports the flash as empty, which speeds triage during firmware analysis. [#21896757]
  • The emulated T-Con boot output captured 237 bytes and printed strings including "UART RDY", "TIMESTAMP : 20170825_0922", and "60Hz USIT Mode". [#21896757]
  • The CPU-adjacent flash chip is marked 25Q40CLSIP and was identified in the thread as 512 KB, suggesting small support firmware rather than a full PC-style BIOS image. [#21896757]

How is the Samsung UE55MU6452U TV internally built, and how are the main board, power supply, speakers, and LCD backlight arranged inside the chassis?

The TV uses a separate LCD panel, bottom-edge LED backlight, internal diffusers, a power board, a main board, and speakers. The author shows the LED strip only on the lower edge, with several diffuser layers spreading light across the whole screen. After removing the rear cover, the two main modules are the power supply and motherboard, with speakers mounted alongside them inside the chassis. [#21896757]

What is Demura in an LCD TV, and why does the T-Con firmware contain Demura LUT upload messages?

"Demura" is an LCD calibration method that compensates pixel-level brightness and color non-uniformity, using stored correction tables that the panel controller uploads during startup. The firmware strings mention "TCON Demura Register Data Uploading" and "TCON Demura LUT Data Uploading" because the T-Con loads these correction values before normal image processing. The same area also logs checksum failures, so the upload path verifies data integrity. [#21896757]

What does the T-Con controller do in a Samsung LCD TV, and what kind of firmware usually lives in its SPI Flash memory?

The T-Con drives the LCD matrix and generates timing and control signals for the pixels. In this thread, its SPI flash holds low-level controller firmware with boot strings, tasking messages, flash support tables, checksum checks, UART output, and panel-calibration data such as Demura and SDC LUT handling. The decoded strings also identify an aeabi Cortex-M0 environment, which shows this is embedded control firmware, not media software. [#21896757]

How do you decode a SPI Flash dump when the text strings look garbled because the bytes are swapped in 32-bit words?

You decode it by reversing the byte order inside every 32-bit word. The author shows garbled text becoming readable after a simple byte-swap, such as text turning into "Incorrect checksum" and "Booting!!!". 1. Read the dump as raw bytes. 2. Reverse each 4-byte chunk. 3. Save the rebuilt file and recheck strings or disassembly. This fixed both the T-Con dump and the CPU-side dump. [#21896757]

Which UART register addresses were identified in the UE55MU6452U T-Con firmware, and how were UART_CTRL, UART_BAUD, UART_STATUS, and UART_TX_DATA recognized during reverse engineering?

The identified registers were 0x009D0E00 for UART_CTRL, 0x009D0E04 for UART_BAUD, 0x009D0E10 for UART_STATUS, and 0x009D0E20 for UART_TX_DATA. The author followed string-print routines in Ghidra, saw a loop waiting for a ready flag, and traced a pointer that resolved to the transmit-data register. Bit 2 in UART_STATUS acted as TX ready, while UART_CTRL held value 0x3 and UART_BAUD held 0x3085. [#21896757]

How can you load a Samsung T-Con Flash dump into Ghidra so ARM Cortex-M0 code disassembles correctly after byte-swapping the data?

Load the corrected dump in Ghidra using ARM little-endian 32-bit Cortex settings. The author states that after byte-swapping the dump first, Ghidra decoded instructions and functions correctly with ARM:LE:32:Cortex settings. That combination exposed valid references to strings such as "UART RDY" and made the control flow readable enough to trace UART output functions. [#21896757]

Why does the T-Con firmware boot log mention aeabi Cortex-M0, multitasking, I2C, SPI Flash checks, and HardFault_Handler, and what does that reveal about the controller architecture?

Those strings show the T-Con is a small embedded computer, not a passive display helper. The dump references aeabi Cortex-M0, task IDs, stack pointers, "Enter Multi Tasking," "I2C M Init," SPI flash model checks, and "Oops!!! HardFault_Handler". That combination reveals ARM Cortex-M0 firmware with a scheduler, peripheral drivers, exception handling, and startup diagnostics. It behaves like a standalone microcontroller platform dedicated to panel control. [#21896757]

What is a LUT in TV panel calibration firmware, and how is it used for Demura or SDC post/pre processing in the T-Con?

"LUT" is a lookup table that stores precomputed correction values, letting firmware apply fast pixel or signal adjustments without recalculating them in real time. In this dump, LUTs are used in Demura compensation and in SDC post/pre uploading stages. The strings explicitly mention "TCON Demura LUT Data Uploading," "SDC Post LUT Uploading," and "SDC Pre LUT," so the controller loads calibration data during initialization. [#21896757]

Capstone plus Unicorn vs direct hardware UART probing: which approach is better for analyzing and validating Samsung TV T-Con firmware behavior?

Capstone plus Unicorn is better for safe early validation, while direct UART probing is better for final hardware confirmation. The thread proves the software path first: the author emulated the firmware, patched some instructions, modeled basic peripherals, and captured a real-looking boot log. He also states that the UART register map still needed physical verification, so hardware probing remains the final check. Use emulation first when repeated soldering costs time. [#21896757]

How do you build a simple proof-of-concept emulator in Python for Samsung T-Con firmware using Capstone and Unicorn to capture the boot log?

Build it by loading the extracted firmware, emulating only the needed peripherals, and logging writes to the mapped UART registers. The author created a Python proof of concept with Capstone and Unicorn, added basic peripheral emulation, and patched some instructions. 1. Load the byte-corrected dump. 2. Map the inferred UART registers. 3. Capture bytes written to UART_TX_DATA. That produced a 237-byte log with timestamp and initialization messages. [#21896757]

What does the second Flash chip next to the Samsung SDP1601 CPU do, and why does it look more like initialization firmware than a classic BIOS?

It looks like small initialization firmware for board bring-up and peripheral support, not a classic BIOS. The chip is marked 25Q40CLSIP, and the thread identifies it as 512 KB. After decoding, the strings expose I2C, HDMI-CEC, ADC, and MiCom-related diagnostics rather than PC-style boot menus or storage logic. The author explicitly concludes that it is not a BIOS. [#21896757]

Which peripherals show up in the CPU-side Flash dump of the UE55MU6452U, such as I2C, HDMI-CEC, ADC, and MiCom, and what can their debug strings tell you?

The dump shows I2C, HDMI-CEC, ADC, and MiCom support. I2C strings expose channel status, FIFO control, core configuration, address, and pin-state diagnostics. HDMI-CEC strings mention RX errors and NACK handling. ADC strings report end-of-conversion and timeout failures. MiCom strings point to communication and ownership handshakes with another controller. Together, these logs reveal early-board initialization, fault reporting, and cross-chip coordination paths. [#21896757]

What are the power supply characteristics of the L55E6R_KHS board, including the 12.8 V main rail and the high-voltage constant-current LED backlight supply?

The L55E6R_KHS board uses two functional outputs: one for the main board and one for the LED backlight. The main-board rail is given as 12.8 V at just over 5 A. The backlight supply is described as a constant-current output and, depending on version, can be 198 V at 370 mA with a 300 Hz drive. The board is single-sided and uses both threaded parts and SMT devices. [#21896757]

Where is the RF tuner or head module located on the Samsung UE55MU6452U main board, and which chip handles the RF section visible in the photos?

The RF tuner or head module is the shielded metal can visible on the main board in the follow-up photos. The thread only identifies its location visually and does not name the tuner IC or RF demodulator chip. That means the safe answer is positional, not schematic: you can see the tuner section on the board photos, but the exact RF chip part number is not provided in the posts. [#21896929]

What is the safest way to dump and experiment with SPI Flash chips like 25Q80DVSIG or 25Q40CLSIP using a CH341 programmer without repeated unsoldering?

The safest method in this thread is to minimize desolder cycles and favor clips or in-circuit access when signal integrity allows it. The author dumped the CPU-side 25Q40CLSIP with a CH341 after unsoldering, but he also says repeated resoldering increases the time cost and that he wants a board where the CH341 clip works reliably. A practical failure case appears here: clips do not work on every board, so verify reads before modifying anything. [#21896757]
Generated by the language model.
ADVERTISEMENT