
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" 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 करता है |
picoreset | pico को फ्लैश मोड में रीसेट करता है |
picoemcreset | emc reset# के माध्यम से emc रीसेट करता है |
picoemcrom | emc को rom (uart bootloader) मोड में/से बाहर रीसेट करता है और pico को आवश्यकतानुसार कॉन्फ़िगर करता है |
picochipconst | emc hw संस्करण के लिए उपयोग करने के लिए स्थिरांक स्थापित करता है |
picofwconst | emc fw संस्करण के लिए उपयोग करने के लिए स्थिरांक/shellcode स्थापित करता है |
titania (दूसरा इंटरफ़ेस)
यह केवल कच्चा uart है, डेटा उपलब्ध होने पर होस्ट और titania के बीच बाइटवाइज़ पास किया जाता है।