अपडेट पर वापस जाएँ
UpdatedSep 1, 2026

ps5-uart — Updated!

PlayStation 5 EMC और EFC के साथ इंटरैक्ट करने के लिए इंटरफ़ेस

साझा करें

सलीना के पास 24 पिन हेडर (EDM-010)

emc header
 1  5v
 2  5v
 3  gnd
 4  gnd
 5  emc gpio a1. emc बूट पर low खींचने से emc rom 460800 पर uart shell में प्रवेश करता है
 6  uart rx emc 115200
 7  uart tx emc 115200
 8  3v3, emc रीसेट होने पर low हो जाता है
 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 में मुख्य रूप से पावर प्रबंधन सामग्री होती है:
(7bit addrs, 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. वास्तव में ps5 पर rt5126 (EDM-010) या da9081 (EDM-020)

emc gpio a 4,5,6,7(cs0:efc),8(cs1:floyd) - emc-efc spi बस (floyd के साथ साझा)

emc gpio a16 rt5126 पिन 13/rt5127 पिन 44 पर जाता है। pg2 के साथ hi सेट करें

emc gpio a29 - efc reset#
emc gpio a30 - titania bootmode (0: nand, 1: uart)
    emc के efc irq हैंडलर को पैच करने के लिए: emc.fcddr_write(0xa0113200, bytes.fromhex('7047'))
        eventflg 8 को task को भेजे जाने से रोकता है
    uart बूट uart1 @ 460800 पर है।
    ज्ञात cmds:
        info: efc से "t2.0.100.041\nEC5E98BF84CC.C.1" प्रिंट करता है, eap से "t2.0.100.043\nEC5E98BF84CC.C.1"
        down: xmodem1k/crc में प्रवेश करता है
            0x03060000 जब hdr.cpu 0x99 हो
        run: (sigchecks/decrypts?) डाउनलोड किए गए डेटा को निष्पादित करता है
            0x030B0000 यदि पहले down किए बिना कॉल किया जाए
            0x06020000 यदि पूरी तरह से अमान्य डेटा पास किया जाए
            0x06020001 यदि hdr.cpu 4 हो। अजीब!!
            0x010100xx यदि hdr.cpu (1,2,4) में नहीं है। xx hdr.cpu मान है (संभवतः सामान्य "अमान्य मान" errorcode)
    अज्ञात cmds 0x030D0000 लौटाते हैं
    त्रुटियाँ titania spi के "fw0" क्षेत्र में लॉग होती हैं
        नोट: spi पढ़ना rom को मार देता है
emc gpio a31 - titania cpu चयन (0: efc, 1: eap)
emc gpio a38 - efc से emc cmd irq (emc efc को reset से रिलीज़ करने के बाद इसके ट्रिगर होने की प्रतीक्षा करता है)

rt5126 - rt5127 कनेक्शन
13      44  (emc gpio a16)
14      45
15      46

titania rom त्रुटि कोड

uart पर त्रुटि कोड का प्रारूप होता है:

bits
31-28       cpu-उत्पत्ति
27-16       त्रुटि major
15-0        त्रुटि minor

आमतौर पर त्रुटि कोड का minor भाग अपराधी मान या जैसे लॉग करने के लिए रजिस्टर मान होता है।

major कोड

0x001   अमान्य rom checksum hi (cmd 1)
0x002   अमान्य rom checksum lo (cmd 1)
0x004   अमान्य ipcfifo src/dst cpu (पढ़ना)
0x006   अमान्य ipcfifo src/dst cpu (लिखना)
0x007   अमान्य ipcfifo रजिस्टर बैंक सूचकांक
0x008   ipcfifo msg len बहुत बड़ा (पढ़ना)
0x009   ipcfifo msg len बहुत बड़ा (लिखना)
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 cmd
0x203   cmd 1 (checksum) का उत्तर देने में विफल। केवल तभी हो सकता है जब 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 अपराधी मान है।
0x306   hdr.cpu=0x99 और अमान्य अन्य फ़ील्ड के साथ छवि को "down" करने का प्रयास
0x30B   मान्य "down" स्थिति के बिना "run"
0x30D   अज्ञात uart कमांड
0x602   छवि सत्यापन विफलता। minor 0: efc/eap, minor 1: bcm

rom ipcfifo रूटिंग

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

rom ipcfifo cmds

cpus 1-3 संभालते हैं:

1   अपने rom का checksum-verify
2   SCTLR.V=0 सेट करें और पते पर जंप करें
4   wfi (ipcfifo cmd dispatch जागने पर चलता रहता है)

pico वायरिंग

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

emc reset# का उपयोग जीवितता का पता लगाने और क्रैश की स्थिति में emc को रीसेट करने के लिए किया जाता है।

pico पर बटन इसे फ्लैश मोड में रीसेट कर देगा।

नोट: यदि आप केवल EMC तक पहुंच चाहते हैं, तो आप bt/wifi मॉड्यूल के पास कनेक्टर का उपयोग कर सकते हैं:
emc_header_dupe_near_wifi
(चिह्न "emc header" pinout से संबंधित हैं, ऊपर)

होस्ट पीसी सेटअप

यदि ENABLE_DEBUG_STDIO cmake विकल्प सेट है, तो cdc इंटरफ़ेस 0 pico sdk stdout/stdin द्वारा लिया जाएगा। यह मानक 115200 बॉड 8n1 है। pcio fw को डीबग करने के लिए उपयोग किया जा सकता है।

अन्य इंटरफ़ेस emc और titania हैं। emc के लिए uart पोर्ट सेटिंग्स (cdc line coding) को अनदेखा किया जाता है - pico वास्तविक uarts को उचित तरीके से सेट करता है। titania के लिए, baudrate होस्ट से कॉन्फ़िगर करने योग्य है।

नोट:
emc \n को cmd के अंत के रूप में मानता है (कॉन्फ़िगर करने योग्य)। इनपुट को इको करता है
efc \r को cmd के अंत के रूप में मानता है। इनपुट \r के लिए \r\n इको करता है

salina (पहला इंटरफ़ेस)

emc इंटरफ़ेस pico पर line buffered है। pico checksums का ध्यान रखता है। बस इसे <cmd> [args..]\n के रूप में सामान्य umcd cmds भेजें। इस इंटरफ़ेस पर होस्ट पीसी को भेजा जाने वाला सभी डेटा फ्रेम किया जाता है ताकि क्लाइंट कोड लिखना आसान हो (देखें Result::to_usb_response)।

वर्तमान में निम्नलिखित विशेष cmds हैं:

cmdनोट्स
unlockआवश्यक होने पर emc exploit करता है
picoresetpico को फ्लैश मोड में रीसेट करता है
picoemcresetemc reset# के माध्यम से emc रीसेट करता है
picoemcromemc को rom (uart bootloader) मोड में/से बाहर रीसेट करता है और pico को आवश्यकतानुसार कॉन्फ़िगर करता है
picochipconstemc hw संस्करण के लिए उपयोग करने के लिए स्थिरांक स्थापित करता है
picofwconstemc fw संस्करण के लिए उपयोग करने के लिए स्थिरांक/shellcode स्थापित करता है

titania (दूसरा इंटरफ़ेस)

यह केवल कच्चा uart है, डेटा उपलब्ध होने पर होस्ट और titania के बीच बाइटवाइज़ पास किया जाता है।

श्रेणियाँ