Encoder firmware - v3l0c1r4pt0r/lkv-wiki GitHub Wiki

Encoder has a firmware file usually with extension .bin. It contains raw dump of ROM memory, which is then loaded at address 0.

Image structure

     0 -   1000: IRQ0 - IRQ15
 7d100 -  b53bf: code section
 b53c0 -  bd5bf: data section
 bd5c0 -  d8d6f: another code section
 d8d70 - 10205f: another data section
200000 - 283104: SMEDIA02 container

Code base

Code starting at address 0x7d100 consists of FreeRTOS port with bunch of custom modules. It uses FreeRTOS for scheduling of the tasks. Task names are:

  • task_main
  • PALFILE
  • MPS
  • AUDIO_IN
  • VIDEO_ENCODER
  • STREAM_MUX
  • STORAGE
  • HDMI_LoopThrough
  • USBEX
  • KEY_MANAGER

Source files

Following source files are known to be present in firmware:

  • tasks.c - partially common with FreeRTOS codebase
  • timers.c - partially common with FreeRTOS codebase
  • msgq.c
  • thread.c
  • heap.c

Encoder CPU-part responsibilities

  • upgrade SMEDIA02 (copy to different memory area)
  • audio driver
  • I2S initialization
  • FAT32 filesystem support (purpose unknown)
  • other/unknown

ISA

Machine code present in *.bin firmware blob is for OpenRISC 1000 (or1k) core.

SPI Flash

Most likely this is later stored on U4 chip.