Назад к обновлениям
UpdatedSep 1, 2026

ps5-uart — Updated!

Интерфейс для взаимодействия с PlayStation 5 EMC и EFC

Поделиться

24-контактный разъём рядом с salina (EDM-010)

emc header
 1  5v
 2  5v
 3  gnd
 4  gnd
 5  emc gpio a1. притяжка к земле при загрузке emc заставляет ROM emc войти в uart shell @ 460800
 6  uart rx emc 115200
 7  uart tx emc 115200
 8  3v3, опускается в ноль при сбросе emc
 9  0v?
10  gnd
11  titania uart0 tx (efc fw: 460800, eap fw: 691200)
12  titania uart0 rx (efc fw: 460800, eap fw: 691200)
13  titania uart1 rx (bootrom: 460800, apu: 230400)
14  titania uart1 tx (bootrom: 460800, apu: 230400)
15  gnd
16  emc gpio c5 ("GPI SW" (используется только если devif_det# активен))
17  0v?
18  5v?
19  emc gpio a49 (devif_det#)
20  emc gpio a27. главный выключатель питания
21  i2c data (i2c_bus_4)
22  i2c clock (i2c_bus_4)
23  gnd
24  emc reset#

i2c_bus_4 содержит в основном управление питанием:
(7-битные адреса, 400khz)
1f      pca9557_gpioexpander    только CP/dev
2c      ad5272_nand             titania nand
2e      ad5272_g6_2             gddr6
2f      ad5272_g6_1             gddr6
51      rt5127_pmic             titania pmic
58      ds80pci102_redriver
64      rt5069_pmic             salina pmic. на самом деле rt5126 (EDM-010) или da9081 (EDM-020) на ps5

emc gpio a 4,5,6,7(cs0:efc),8(cs1:floyd) - шина spi emc-efc (общая с floyd)

emc gpio a16 идёт на вывод 13 rt5126/вывод 44 rt5127. установить в hi вместе с pg2

emc gpio a29 - efc reset#
emc gpio a30 - режим загрузки titania (0: nand, 1: uart)
    чтобы пропатчить обработчик irq efc у emc: emc.fcddr_write(0xa0113200, bytes.fromhex('7047'))
        предотвращает отправку eventflg 8 в задачу
    uart-загрузка идёт через uart1 @ 460800.
    известные команды:
        info: выводит "t2.0.100.041\nEC5E98BF84CC.C.1" из efc, "t2.0.100.043\nEC5E98BF84CC.C.1" из eap
        down: входит в xmodem1k/crc
            0x03060000 когда hdr.cpu равен 0x99
        run: (проверяет сигнатуры/расшифровывает?) загруженные данные и выполняет
            0x030B0000 если вызвана без предварительного down
            0x06020000 если переданы полностью невалидные данные
            0x06020001 если hdr.cpu равен 4. странно!!
            0x010100xx если hdr.cpu не входит в (1,2,4). xx — значение hdr.cpu (вероятно, общий код ошибки "невалидное значение")
    неизвестные команды возвращают 0x030D0000
    ошибки записываются в область "fw0" spi titania
        примечание: чтение spi, похоже, убивает rom
emc gpio a31 - выбор cpu titania (0: efc, 1: eap)
emc gpio a38 - irq команды от efc к emc (emc ждёт его срабатывания после вывода efc из сброса)

rt5126 - соединения rt5127
13      44  (emc gpio a16)
14      45
15      46

коды ошибок rom titania

коды ошибок на uart имеют формат:

биты
31-28       cpu-источник
27-16       старшая часть ошибки
15-0        младшая часть ошибки

обычно младшая часть кода ошибки — это offending-значение или, например, значение регистра для журналирования.

старшие коды

0x001   невалидная контрольная сумма rom hi (cmd 1)
0x002   невалидная контрольная сумма rom lo (cmd 1)
0x004   невалидный src/dst cpu ipcfifo (чтение)
0x006   невалидный src/dst cpu ipcfifo (запись)
0x007   невалидный индекс банка регистров ipcfifo
0x008   длина сообщения ipcfifo слишком велика (чтение)
0x009   длина сообщения ipcfifo слишком велика (запись)
0x011   DFSR
0x012   IFSR
0x013   ADFSR hi
0x014   ADFSR lo
0x015   AIFSR hi
0x016   AIFSR lo
0x017   DFAR hi
0x018   DFAR lo
0x019   IFAR hi
0x01a   IFAR lo
0x201   ожидался ipcfifo 0x55
0x202   неизвестная команда ipcfifo
0x203   не удалось ответить на cmd 1 (контрольная сумма). может произойти только если src/dst cpu невалидны.
0x204   minor 0: не удалось прочитать адрес перехода. minor 1: не удалось подтвердить адрес перехода.
0x205   не удалось подтвердить cmd 4, или wfi проснулся.
0x206   (minor 0) __stack_chk_fail
0x207   (minor 3) __stack_chk_fail
0x30E   minor 1: истекло время ожидания записи байта в uart1

коды из bootrom

0x101   невалидное значение поля hdr.cpu. minor — offending-значение.
0x306   попытка "down" образа с hdr.cpu=0x99 и невалидными другими полями
0x30B   "run" без валидного состояния "down"
0x30D   неизвестная uart-команда
0x602   сбой проверки образа. minor 0: efc/eap, minor 1: bcm

маршрутизация ipcfifo rom

rom использует только 6 банков ipcfifo (cpu0 <-> остальные). fw использует 12 (все <-> все)

src dst bank
    1   1
    2   3
    3   5
1       0
2       2
3       4

т.е.

bank
0       1 -> 0
1       0 -> 1
2       2 -> 0
3       0 -> 2
4       3 -> 0
5       0 -> 3

команды ipcfifo rom

cpu 1-3 обрабатывают:

1   проверка контрольной суммы собственного rom
2   установить SCTLR.V=0 и перейти по адресу
4   wfi (диспетчер команд ipcfifo продолжает работать при пробуждении)

разводка pico

pico        emc header
1           6
2           7
3           4
4           5
5           24
11          12
12          11

emc reset# используется для определения активности и сброса emc в случае сбоя.

Кнопка на pico сбросит его в режим flash.

Примечание: Если вам нужен доступ только к EMC, можно использовать разъёмы рядом с модулем bt/wifi:
emc_header_dupe_near_wifi
(обозначения соответствуют распиновке "emc header", выше)

настройка хост-ПК

Если установлена опция cmake ENABLE_DEBUG_STDIO, интерфейс cdc 0 будет занят stdout/stdin pico sdk. Это стандартные 115200 бод 8n1. Можно использовать для отладки прошивки pcio.

Остальные интерфейсы — это emc и titania. Настройки порта uart (cdc line coding) для emc игнорируются — pico настраивает реальные uart правильным образом. Для titania скорость можно настроить с хоста.

Примечание:
emc считает \n концом команды (настраивается). эхо-вывод ввода
efc считает \r концом команды. выводит \r\n в ответ на ввод \r

salina (первый интерфейс)

Интерфейс emc буферизуется по строкам на pico. Pico берёт на себя контрольные суммы. Просто отправляйте обычные команды umcd в форме <cmd> [args..]\n. Все данные, отправляемые на хост-ПК через этот интерфейс, обрамляются так, чтобы упростить написание клиентского кода (см. Result::to_usb_response).

В настоящее время существуют следующие специальные команды:

cmdпримечания
unlockвыполняет эксплойт emc при необходимости
picoresetсбрасывает pico в режим flash
picoemcresetсбрасывает emc через emc reset#
picoemcromсбрасывает emc в/из режима rom (uart bootloader) и настраивает pico по мере необходимости
picochipconstустанавливает константы для использования с версией железа emc
picofwconstустанавливает константы/шеллкод для использования с версией прошивки emc

titania (второй интерфейс)

Это просто сырой uart, данные просто передаются между хостом и titania побайтово по мере поступления.

Категории