Разбираем чужие схемы ч.3
Продолжаем разбор схемы Macbook Pro 15'' на Intel i7. С первой частью можно ознакомиться тут, а со второй - тут.
На этот раз разбираем цифровые блоки. Цифровая часть состоит из стандартных интерфейсов (PCIe, DDR, USB, SPI, I2C итд), соединить которые на схеме достаточно легко. В связи с этим разбирать будем не только схемотехнику, но и архитектуру.
По традиции, разобранные в прошлых частях страницы я удалил из оглавления, а претендентов на сегодняшний разбор выделил красным.
Напоминаю, что разбирать я планирую на более менее продвинутом уровне. Буду выделять в основном интересные моменты, неочевидные нюансы или хорошие решения.
Архитектура
Поскольку в открытом доступе нет информации о точной архитектуре Macbook Pro, предлагаю нарисовать ее самостоятельно исходя из схем.
В качестве процессора используется Intel 9750H. Поискав в интернете несложно найти документацию на него. В нашем случае используется процессор в корпусе BGA1440 совместно с чипсетом (PCH). Итого 2 чипа.
Intel в своей документации показывает следующее подключение:
Intel предлагает использовать встроенную в процессор графику для подключения дисплеев, внешних мониторов и прочего. PCH же используется для периферийных, более медленных устройств (USB порты, аудио, Wi-Fi, BT, камера итд). Apple абсолютно не согласны с такой архитектурой. Камнем преткновения является безопасность данных с накопителей, камер, микрофонов, шифрование и touch ID.
Архитектура Макбука сосредоточена вокруг их собственного SoCа. Процессор от Intel обеспечивает систему скоростными интерфейсами, такими как PCIe G.3, двумя каналами памяти DDR4 x64 и DMI интерфейсом для соединения с PCH (аналог PCIe G.3).
Графика формируется с помощью встроенного eDP в CPU и GPU AMD Radeon 555X. Поскольку в Макбуке есть только разъемы TBT (Thunderbolt), они используются для подключения внешних устройств и мониторов. При подключении мониторов рендеринг графики будет происходить на GPU и передаваться по DP в контроллер, который преобразует его в TBT. При подключении другого устройства, например SSD накопителя, взаимодействие будет происходить с CPU через x4 PCIe. Таким образом, данные идут через PCIe, а графика через DP.
Все взаимодействие с пользователем проходит через SoC от Apple. PCH формирует всего несколько интерфейсов, такие как x1 PCIe, 3x USB2.0, все остальную работу выполняет чип T2, который подключен к PCH по x4 PCIe. К Т2 подключены все 8 SSD по 1x PCIe G.3, аудио кодек, усилители для динамиков, защитный элемент, TouchBar, TrackPad, камера дисплей, все датчики и прочее.
По итогу у меня получилось следующая картина:
После короткого ликбеза по архитектуре приступим к схемe. Для того чтобы лучше разобраться советую иногда возвращаться к блок диаграмме.
5_CPU DMI/PEG/FDI/RSVD
На этой странице подключение CPU к мостам PCIe <-> TBT (2x4), AMD GPU (x8). А также шина DMI для подключения PCH. Стоит заметить, что интерфейс DDI (Digital display interface) остался не подключен. Встроенный DP от CPU мультиплексируется с DP от GPU и подключен к дисплею ноутбука.
Еще одна вещь, которая меня заинтересовала - это название портов PEG (PCIe Graphics). Судя по документации Intel, именно этот порт поддерживает ультранизкое потребление (L2/L3 Power state).
6_CPU Clock/Misc/JTAG/CFG
На это странице расположены подтяжки, которые устанавливаются режим работы CPU, например, разбиение портов (x8, x4, x4). Сигналы тактирования процессора, сигналы для менеджмента (PECI, PROCHOT, PWRGOOD итд), тестовые сигналы (XDP) и JTAG.
7_CPU DDR4 Interfaces
На это странице часть CPU, которая отвечает за DDR. Комментировать особо нечего.
12_PCH RTC/CLK/ESPI/PM
С этой страницы начинается PCH. Он формирует все тактирование для CPU, PCIe EP (SOC, Wi-Fi). Из интересного: разработчики используют резисторы R1251, R1250 для гарантированной работы кварца. R1251 создаст в случае чего условия для осцилляции, а R1250 ограничит ток.
PCH подключен к T2 по eSPI. Это развитие старого LPC. Интерфейс работает на частоте 66Мгц и используется для процесса загрузки, передачи сервисной информации и общения с другими устройствами. Данные с системных шин SPI, SMBus, GPIO уже встроены в eSPI.
13_PCH DMI/JTAG/SPI/HDA
Тут расположена ответная часть интерфейса DMI и формирование сигналов управления для CPU. Заметим, что HDA подключение кодека не используется и выведено лишь на тестовые точки. Опять видим подключение к отладочному/тестовому разъему XDP (JTAG, SPI). PMSYNC, PMDOWN - сигналы, которые используются для общения между CPU и PCH о текущем состоянии процессора (Power state).
14_PCH PCI-E/USB
PCH подключен к Т2 по x4 PCIe и по x1 PCIe к Wi-Fi/BT модулю. 3x USB2.0 идут в Type-C контроллеры, а 4й порт выведен на отладочный разъем и мультиплексируется с другим USB2.0. USB3.0 задействован исключительно для отладки SoC T2 или глобально системы. JTAG ведет к тестовому разъему XDP.
15_PCH GPIO/MISC/NCTF
На этой странице располагаются подтяжки для определения режимов работы системы, в том числе объем DDR.
22_DDR4 SDRAM Channel A 1
23_DDR4 SDRAM Channel A 2
24_DDR4 SDRAM Channel B 1
25_DDR4 SDRAM Channel B 2
8 чипов DDR4 шириной х8 подключены на каналы А и В. Итого получаем 16 чипов:
26_DDR4 Termination
На этом листе у нас терминация DDR. Однополярные адреса и прочие сигналы имеют параллельную терминацию на питание VTT. Средняя точка дифференциального сигнала тактирования, также терминированная на VTT через емкость.
27_USB-C HIGH SPEED 1
Переходим к мосту PCIe/DP <-> TBT. Как уже было рассказано в разделе архитектуры, мосты подключены по x4 PCIe к CPU и по DP к GPU. На выходе у мостов x2 TBT, которые идут на межплатный разъем. Для работы подобных мощных микросхем требуется свой кварц, SPI Flash с конфигураций, которую можно заметить слева на листе.
28_USB-C HIGH SPEED 2
И хоть лист совсем не про high speed, а про питание микросхемы, разберем его. В целом мы уже видели все подобные приемы ранее. Микросхема имеет встроенные силовые ключи для формирования питания самой себе.
30_USB-C PORT CONTROLLER A
На этой странице у нас комбинация цифровых интерфейсов (USB2.0) и силовых ключей. Я нашел контроллер подобный изображенному на листе - TPS65982.
Контроллер самостоятельно формирует себе питания, управляет CC логикой, выдает различные полезные сигналы (превышение напряжения, тока). SoC также имеет возможность давать контроллеру команды по I2C. Сборка ключей Q3100 используется для блокирования проникновения напряжения батареи на шину и наоборот. Можно также заметить закороченные сигналы SENSEP/N, это приведет к деактивации функции измерения тока, но позволит не ставить лишний шунт.
Хочу заметить, что на текущем листе выход USB2.0 не подключен ни к чему. Один из входов мультиплексора USB2.0 подключен к микросхеме еще одного мультиплексора U3000 (видимо также для отладочных целей).
30_USB-C PORT CONTROLLER B
Аналогичный контроллер, но теперь выход и входы мультиплексора USB2.0 подключены к PCH и разъему TBT. GPIO контроллера используется для формирования сигнала OC (Over current), который идет на PCH. Не очень понимаю, как можно формировать подобный сигнал при отсутствии шунта для измерения тока.
36_WIFI/BT: MODULE 1
Модуль WiFi/BT от Murrata (внезапно) подключен к PCH по x1 PCIe, UART. К SoCу он подключен по 2м UARTам. Хотя подключение UART_BT спорное, поскольку у аналогичного модуля выводы I2C не поддерживают режим UART. По традиции у модуля есть свои SPI Flash. Причем 2 разных (для WiFi и BT). У модуля также присутствуют встроенные ключи. С помощью индукторов на схеме он формирует себе напряжение питания. Руководит дискретными сигналами в основном SoC. К модулю подключаются антенны на разный диапазон, которые расположены на других листах.
38_SoC GPIO/SEP/USB/DDR/Test
Переходим к SoCу T2. Аналогичный прием с резисторами R3941, R3940 для осциллятора. С помощью резисторов задается ток драйвера DDR, USB.
39_SoC AOP/AON/SMC
На этой странице расположены аналоговые входы SoCa для измерения токов и напряжений. Присутствуют сигналы от DMIC, I2C, UARTы, различные GPIO. eSPI используется для первичной загрузки PCH при страте системы и передачи служебной информации.
40_SoC ISP/I2C/UART/SPI/I2S
Продолжение периферии SoC. По MIPI подключена камера и дисплей. Для подключения аудио усилителей и кодека используется I2S. UARTы для подключения микросхемы защиты (SE), BT, Wi-Fi. Причем практически везде используется UART к модемными CTS, RTS для контроля потока данных.
41_SoC PCIe
По PCIe SoC соединен напрямую к PCH по 4 лейнам. Также из SoCа выходят 8x1 PCIe к 8-ми SSD чипам. Еще один x1 линк используется для системы Lifeboat. Интернет говорит, что с помощью подключения к разъему Lifeboat возможно спасти данные, если SSD были повреждены. Также хочу отметить, что PCIe Refclk идет на две микросхемы SSD одновременно.
83_SSD0 S4E 0
84_SSD0 S4E 1
85_SSD0 S4E 2
86_SSD0 S4E 3
88_SSD1 S4E 0
89_SSD1 S4E 1
90_SSD1 S4E 2
91_SSD1 S4E 3
На этих страницах располагаются те самые 8 SSD, подключенных к SoC. Все SSD подключены в последовательную цепочку по JTAG для удобства отладки. Опять встречаем трехвыводные конденсаторы с низкой индуктивностью. Выводы ZQ_C, ZQ_N используются для калибровки микросхемы
95_GPU Baffin PCIe
Подключение AMD GPU начинается с PCIe. Как и указано в архитектуре x8 PCIe G.3 идет от CPU. Сигнал EG_VR0_PGOOD формируется из Power good источников GPU и системных 3.3В. А для отладки даже добавили первый светодиод, который я вижу на схеме.
97_GPU Baffin FB
Особо ничего интересного, обычное подключение GDDR5 к GPU. Ток драйвера устанавливается резисторами
99_GDDR5 VRAM FB 1 [104]
100_GDDR5 VRAM FB 2
Подключение самих чипов GDDR. Шина X32 идет на каждый чип, практически аналогично DDR4. Терминация клоков, настройка силы драйверов.
102_GPU Baffin GPIO/CLK/Straps
Различные настройки для GPU, SPI-Flash для загрузки настроек в чип. Также можно заметить тактовый генератор с точностью 20ppm. Хотя опция с кварцем была также доступна.
103_GPU Baffin DP/GPIO
На этом листе расположены управляющие сигналы GPU, DP для мостов PCIe/DP <-> TBT, отладочный JTAG, I2C и немного питания с фильтрами. Справа на листе стоят загадочные конденсаторы CA8800, CA8801 с последовательными резисторами. Возможно, они предназначены для установки полосы PLL либо для фильтрации питания.
93_EDP Mux
Помните eDP с CPU и DP c GPU? Так вот на этой странице они встречаются. Мультиплексор управляет тем, какой интерфейс попадет на дисплей. Также на странице располагается обычный I2C расширитель портов. А еще тут формируется сигнал для сброса дисплея, если PMIC умер. Аналогично с GPU. Если умерли (или просто отключились) источники или пришел сброс для всей платформы, формируется сигнал GPU_RESET_L.
105_USB-C HIGH SPEED 1
106_USB-C HIGH SPEED 2
108_USB-C PORT CONTROLLER A
109_USB-C PORT CONTROLLER B
На этих страницах идет полное повторение ранее разобранных страниц.
Заключение
В этой части я не нашел ни одной критической ошибки. Однако есть некоторые нюансы, которые хотелось бы выделить. Основное и самое важное: SoC подключен к PCH по x4 PCIe G.3, при том к SoC подключено кучу периферии, в том числе и 8x1 PCIe G.3 SSD. Догадываюсь, что расчет на то, что обращение к SSD не будет забирать всю полосу. Скорее всего так и есть. И еще одно. PCH подключен к CPU по DMI, что по факту эквивалентно x4 PCIe G.3. Таким образом, имеем два узких места: соединение PCH <-> CPU и PCH <-> SoC. Теперь становится очевидно, почему Apple перешли на свой процессор. Они закрыли проблему узкого места в интерконнекте и смогли использовать периферию SoC на полную без необходимости пропускать ее через сторонний PCH от Intel.