Регулярно в процессе разработки электроники возникают вопросы: "А как правильно? А так можно? Будет ли это работать?". В связи с этим предлагаю посмотреть: а как же проектируют свои устройства передовые технологические компании? Где они ошибаются, а что делают превосходно.
Продолжаем разбор схемы Macbook Pro 15'' на Intel i7. С первой частью можно ознакомиться тут

Материнская плата Macbook на базе intel i7
На этот разберём в основном цифровые блоки, разъемы, отладочные цепи. Цифровая часть состоит из стандартных интерфейсов (PCIe, DDR, USB, SPI, I2C итд), соединить которые на схеме достаточно легко. Поэтому начнем с обсуждения архитектуры.
Напоминаю, что разбирать я планирую на более менее продвинутом уровне. Буду выделять в основном интересные моменты, неочевидные нюансы или хорошие решения.
Схему можно найти в интернете по запросу в Google:
Apple X1190 820–01041 051-02643) r4.0.0 ali.
Архитектура
Поскольку в открытом доступе нет информации о точной архитектуре Macbook Pro, нарисуем ее самостоятельно исходя из схемы.
В качестве процессора используется Intel 9750H. Поискав в интернете несложно найти документацию на него. В нашем случае используется процессор в корпусе BGA1440 совместно с чипсетом (PCH). Итого 2 чипа.

9-е поколение процессоров Intel Coffee Lake
Intel в своей документации показывает следующее подключение:

Вариант подключения процессора из документации Intel
Intel предлагает использовать встроенную в процессор графику для подключения дисплеев, внешних мониторов и прочего. PCH же используется для периферийных, более медленных устройств (USB порты, аудио, Wi-Fi, BT, камера итд). Apple абсолютно не согласны с такой архитектурой. Камнем преткновения является безопасность данных с накопителей, камер, микрофонов, шифрование и touch ID.
Архитектура Macbook сосредоточена вокруг их собственного SoCа. Процессор от Intel обеспечивает систему скоростными интерфейсами, такими как PCIe G.3, двумя каналами памяти DDR4 x64 и DMI интерфейсом для соединения с PCH (аналог PCIe G.3).
Графика формируется с помощью встроенного eDP в CPU и GPU AMD Radeon 555X. Поскольку в Макбуке есть только разъемы USB-C, они используются для подключения внешних устройств и мониторов. При подключении мониторов рендеринг графики будет происходить на 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, камера дисплей, все датчики и прочее.
По итогу у меня получилось следующая картина:

Блок - диаграмма материнской плат�� Macbookа Pro 15'
После короткого ликбеза по архитектуре приступим к схемe. Для того чтобы лучше разобраться советую иногда возвращаться к архитектурной блок-диаграмме.
5_CPU DMI/PEG/FDI/RSVD
На этой странице подключение CPU к мостам PCIe <-> TBT (2x4), AMD GPU (x8). А также шина DMI для подключения PCH. Стоит заметить, что интерфейс DDI (Digital display interface) остался не подключен. Встроенный DP от CPU мультиплексируется с DP от GPU и подключен к дисплею ноутбука.

Страница CPU DMI/PEG/FDI/RSVD
Еще одна вещь, которая меня заинтересовала - это название портов PEG (PCIe Graphics). Судя по документации Intel, именно этот порт поддерживает ультранизкое потребление (L2/L3 Power state).

Режимы энергопотребления PEG портов
6_CPU Clock/Misc/JTAG/CFG
На это странице расположены подтяжки, которые устанавливаются режим работы CPU, например, разбиение портов (x8, x4, x4). Сигналы тактирования процессора, сигналы для менеджмента (PECI, PROCHOT, PWRGOOD итд), тестовые сигналы (XDP) и JTAG.

Страница CPU Clock/Misc/JTAG/CFG
7_CPU DDR4 Interfaces
На это странице часть CPU, которая отвечает за DDR. Комментировать особо нечего.

Страница CPU DDR4 Interfaces
21_DDR4 VREF Margining
Для того чтобы контроллер памяти внутри CPU корректно распознавал и выдавал логические уровни на шине DDR - ему необходимо установить пороги. В данном случае это половина питаний для DDR контроллеров. Параллельно расположена RC цепь, которая дает небольшую задержку и демпфирует переходные процессы.

12_PCH RTC/CLK/ESPI/PM
С этой страницы начинается PCH. Он формирует все тактирование для CPU, PCIe EP (SOC, Wi-Fi). Из интересного: разработчики используют резисторы R1251, R1250 для гарантированной работы кварца. Каждый кварц имеет максимальную мощность, которую можно в него "закачать", обычно Drive level (измеряется в uW). R1251 создаст в случае чего условия для осцилляции, а R1250 ограничит ток (Drive level).

Страница PCH RTC/CLK/ESPI/PM
PCH подключен к T2 по eSPI. Это развитие старого LPC. Интерфейс работает на частоте 66Мгц и используется для процесса загрузки, передачи сервисной информации и общения с другими устройствами. Данные с системных шин SPI, SMBus, GPIO уже встроены в eSPI.

Туннелирование SMBus, SPI, GPIO в eSPI
13_PCH DMI/JTAG/SPI/HDA
Тут расположена ответная часть интерфейса DMI и формирование сигналов управления для CPU. Заметим, что подключение HDA кодека не используется и выведено лишь на тестовые точки. Опять видим подключение к отладочному/тестовому разъему XDP (JTAG, SPI). PMSYNC, PMDOWN - сигналы, которые используются для общения между CPU и PCH о текущем состоянии процессора (Power state).

Страница PCH DMI/JTAG/SPI/HDA
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.

Страница PCH PCI-E/USB
15_PCH GPIO/MISC/NCTF
На этой странице располагаются подтяжки для определения режимов работы системы, в том числе объема памяти DDR.

19_Chipset Support 1
Поскольку некоторые микросхемы имеют разные логические уровни (1.8, 3.3) для их соединения требуются трансляторы уровней. На данной странице представлены как раз такие микросхемы. Сигнал синхронизации WLAN_AUDIO_SYNC формируется SoC T2 и должен также приходить на PCH. Кроме того, тут располагаются сигналы CLKREQ_N. В устройствах, которые питаются от батареи, важно снижать потребление. Когда тактирование для PCIe EP не требуется, его отключают по данному сигналу, чтобы не разряжать батарею. Для GPU данный сигнал становится валидным после выставления PGOOD = 1.

20_Chipset Support 2
Еще одна страница с трансляторами уровней, также на ней располагается отладочный разъем для eSPI. Слева на страницу приходит сигнал глобального сброса всей платформы (PLT_RST), далее он расходится по крупным микросхемам.

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 чипов, как и говорит архитектура.

Страница DDR4 SDRAM Channel A 1
26_DDR4 Termination
На этом листе у нас терминация DDR. Однополярные адреса и прочие сигналы имеют параллельную терминацию на питание VTT. Средняя точка дифференциального сигнала тактирования терминированна на VTT через емкость.

Страница DDR4 Termination
Напомню, что в DDR4 шина CA проходит через все чипы и терминируется в конце на 1/2VTT.
Это связано с особенностями каскадов POD. Шина данных имеет ODT .

Подробнее можно почитать в статье у моего хорошего знакомого.
27_USB-C HIGH SPEED 1
Переходим к мосту PCIe/DP <-> TBT. Как уже было рассказано в разделе архитектуры, мосты подключены по x4 PCIe к CPU и по DP к GPU. На выходе у мостов x2 TBT, которые идут на межплатный разъем. Для работы подобных мощ��ых микросхем требуется свой кварц, SPI Flash с конфигураций, которую можно заметить слева на листе.

Страница USB-C HIGH SPEED 1
28_USB-C HIGH SPEED 2
И хоть лист совсем не про high speed, а про питание микросхемы, разберем его. В целом мы уже видели все подобные приемы ранее. Микросхема имеет встроенные силовые ключи для формирования питания самой себе.

Страница USB-C HIGH SPEED 2
30_USB-C PORT CONTROLLER A
На этой странице у нас комбинация цифровых интерфейсов (USB2.0) и силовых ключей. Я нашел контроллер подобный изображенному на листе - TPS65982.

Страница USB-C PORT CONTROLLER A
Контроллер самостоятельно формирует себе питания, управляет CC логикой, выдает различные полезные сигналы (превышение напряжения, тока). SoC также имеет возможность давать контроллеру команды по I2C. Сборка ключей Q3100 используется для блокирования проникновения напряжения батареи на шину и наоборот. Можно также заметить закороченные сигналы SENSEP/N, это приведет к деактивации функции измерения тока, но позволит не ставить лишний шунт.

Внутренности TPS65982
Хочу заметить, что на текущем листе выход USB2.0 не подключен ни к чему. Один из входов мультиплексора USB2.0 подключен к микросхеме еще одного мультиплексора U3000 (видимо также для отладочных целей).
29_USB-C X Support
Похоже не на support, а на кашу, но давайте попробуем разобраться. Слева на странице расположен те самые предохранители на 6А по 12В. Посередине листа расположены разъемы для управления USB/TBT контроллеров. Снизу, судя по всему, cross switch для USB и SWID сигналов, который также служит для отладки. Справа - соединения TBT контроллера (мастера) к USB контролерам.

30_USB-C PORT CONTROLLER B
Аналогичный контроллер, но теперь выход и входы мультиплексора USB2.0 подключены к PCH и разъему TBT. GPIO контроллера используется для формирования сигнала OC (Over current), который идет на PCH. Не очень понимаю, как можно формировать подобный сигнал при отсутствии шунта для измерения тока.

Страница USB-C PORT CONTROLLER B
32_USB-C CONNECTOR A
Все USB/TBT контроллеры ведут к внешнему разъему USB-C. На питании у него стоят диод Шоттки и TVS. Вместе они помогают ограничить осцилляции и неприятные эффекты от индуктивной нагрузки (кабеля). На линиях данных стоят ESD диоды с очень маленькой емкостью (чтобы не ослаблять сигнал USB SS). Также SS линии притянуты к земле подтяжками в 220кОм и имеют последовательные резисторы 2Ом. Предполагаю, что это может быть сделано для снижения отражений по высокосортным линиям и ограничения тока в случае КЗ.

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. К модулю подключаются антенны на разный диапазон, которые расположены на других листах.

Страница WIFI/BT: MODULE 1
Вот так выглядит начинка подобного модуля от Murrata.

Однако в macbook, судя по всему, более продвинутая версия с расширенным функционалом.
35_WIFI/BT: Support
Мультиплексированием UARTа между SoC и PCH управляет SoC с помощью сигнала BTUARTMUX_SEL_PCH. Также предусмотрена защита: пока SoC не выдаст SMC_PCH_PWROK мультиплексор не будет активен.

37_AP & BT Conn
Для экономии места используются 3 разъема для антенн, которые разбиваются на 2 разных поддиапазона с помощью диплексеров. На этой же странице сидит акселерометр и отладочный разъем для Wi-Fi/Bluetooth модуля.

38_SoC GPIO/SEP/USB/DDR/Test
Переходим к SoCу T2. Аналогичный прием с резисторами R3941, R3940 для осциллятора. С помощью резисторов задается ток драйвера DDR, USB.

Страница SoC GPIO/SEP/USB/DDR/Test
39_SoC AOP/AON/SMC
На этой странице расположены аналоговые входы SoCa для измерения токов и напряжений. Присутствуют сигналы от DMIC, I2C, UARTы, различные GPIO. eSPI используется для первичной загрузки PCH при страте системы и передачи служебной информации.

Страница SoC AOP/AON/SMC
40_SoC ISP/I2C/UART/SPI/I2S
Продолжение периферии SoC. По MIPI подключена камера и дисплей. Для подключения аудио усилителей и кодека используется I2S. UARTы для подключения микросхемы защиты (SE), BT, Wi-Fi. Причем практически везде используется UART к модемными CTS, RTS для контроля потока данных.

Страница SoC ISP/I2C/UART/SPI/I2S
41_SoC PCIe
По PCIe SoC соединен напрямую к PCH по 4 лейнам. Также из SoCа выходят 8x1 PCIe к 8-ми SSD ��ипам. Еще один x1 линк используется для системы Lifeboat. Интернет говорит, что с помощью подключения к разъему Lifeboat возможно спасти данные, если SSD были повреждены. Также хочу отметить, что PCIe Refclk идет на две микросхемы SSD одновременно.

Страница SoC PCIe
46_SoC Shared Support
На этой странице расположены критические сигналы для функционирования системы. Слева - подтяжки, которые определяют конфигурацию системы (ревизия платы, ID, режим отладки SoC). Микросхемка посередине - опорный источник для АЦП SoC. Схема в нижнем левом углу формирует сигнал CPU_VCCST_PWRGD только если система не находится в сбросе. Справа снизу загадочная микросхема U4740. Мое предположение: она представляет собой некий цифровой автомат, выдает сигналы справа в зависимости от сигналов слева. Кстати, обратите внимание на делители на входных сигналах, уровни которых составляют 3.3В. Допустимое решение для медленных однонаправленных сигналов.
Поднимаемся выше. Тут у нас схема буферизации сигнала SMC_PROCHOT_L. Скорее всего, SoC имеет возможность управлять им, но выходной ток у него ограничен. Таким образом буфер с триггером Шмидта по входу - хорошее решение. Еще выше видим транслятор уровней системных сигналов U4760. Справа вверху расположена SPI Flash для начальной конфигурации SoC.

Самое интересное на этой странице - схема сдвига уровня для двунаправленной шины PECI. Данная шина используется для передачи важной информации (температура, команды для управления).

Шина - проприетарный 1-wire от Intel, а SoC от Apple хочет подслушивать данные на шине и передавать свою информацию. В связи с этим и появилась схема, превращающая RX и TX от SoC в единый RX/TX PECI. Когда SMC_PECI_TX = 1 (SoC передает данные по TX), буфер U4750 также передает 1 на шину со своего входа (A = B). Когда SMC_PECI_TX = 0, буфер переходит в высокоимпедансное состояние, позволяя SoC слушать шину по RX.
47_SoC Project Support
На этой странице в основном соединение цепей через резисторы/конденсаторы. Справа расположены два разъема, к которым подключаются датчики вскрытия. Датчики утягивают сигналы SMC_LID_RIGHT, SMC_LID_LEFT в 0, пока корпус не вскрыли. Когда они сработали, сигнал идет на другие компоненты, в том числе на плату Touch ID, TPAD. Возможно, они записывают данное событие себе в регистр и могут выполнять определённые действия.

49_Secure Element
Микросхема защиты подключена к SoC по UART с контролем потока (RTC, CTS). Предсказуемо найти компонент по названию мне не удалось. К выводу VBAT подключены PP3V3_G3S_T. Напряжение, которое присутствует в G3S состоянии.

50_DFR & T208 Support
Насколько я понял из интернета, DFR - это Touchbar. Он состоит из дисплея и сенсора. Сенсор (верхний разъем) подключен по SPI. На этот же разъем приходит сигнал с датчика вскрытия. Снизу дисплей, который подключен по MIPI к SoC. Использован отдельный источник 1.8В, который питается от PP3V3_G3H_DFR. Которое, в свою очередь, формируется из PP3V3_G3H_RTC_X. Таким образом, дисплей работает в состоянии G3H.

Чуть подробнее состояния питания системы можно увидеть на картинке из этой статьи:

51_I2C Connections 1
Наконец то более - менее оформленная страница, или я уже привык. Глобально тут ничего интересного, подтяжки I2C и трансляторы уровней. В центре можно подсмотреть какие устройства в каком состоянии питания работают. Например, в G3H/G3S работают trackpad, контроллеры USB-C, зарядник, батарея и SSD.

52_I2C Connections 2
Продолжение подключений I2C. Справа расположены адресы большинства устройств на шине SoC.

59_Fans/SMC/AMUX Support
На странице расположены два разъема, которые, видимо, используются для питания вентиляторов. Однако управление идет с другого разъема.

65_Keyboard & Trackpad 1
На эту страницу и приходят PWM с прошлой страницы. PWM и сигнал тахометра расположены на разъемы клавиатуры. Единственное, мне не ясно, зачем подводить питание и через этот разъем. Возможно, оно нужно для логических уровней. На разъем Trackpad приходят аж 12В (отсюда и предохранитель). Управление по SPI от SoC.

66_Keyboard & Trackpad 2
Завершают схему trackpadа трансляторы уровней. Тут все логично: быстрый SPI на специализированных микросхемах, а медленные сигналы - на дискретных, более дешевых транзисторах.

82_eDP Display Connector
Помните разъем дисплея из архитектуры, который подключен по MIPI к SoC и к eDP/DP? Вот он, снизу справа страницы. Кроме того, посредине расположен переключатель MIPI от SoC
Забавляют подписи:
Resistor needed?
I2C pulls needed on both sides???
Я бы сказал, что последовательные резисторы тут не помешают, чтобы не подключить MIPI напрямую в землю и не выжечь драйвер (хотя возможно, сопротивления ключа хватит).
Кроме этого, опять видим микросхему - конечный автомат в лице U8510. А сверху интересная схема. Она задерживает включение PP3V3_S0SW_LCD относительно PP5V_S0SW_LCD и выключение PP3V3_S0SW_LCD относительно PP5V_S0SW_LCD. Скорее всего, у дисплея есть определенная последовательность включения/отключения питания.
На линиях MIPI синфазные фильтры. Очень логично, учитывая, что интерфейс пойдет по кабелю.

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 используются для калибровки микросхемы

Страница SSD0 S4E 0
95_GPU Baffin PCIe
Подключение AMD GPU начинается с PCIe. Как и указано в архитектуре x8 PCIe G.3 идет от CPU. Сигнал EG_VR0_PGOOD формируется из Power good источников GPU и системных 3.3В. А для отладки даже добавили первый светодиод, который я вижу на схеме.

Страница GPU Baffin PCIe
97_GPU Baffin FB
Особо ничего интересного, обычное подключение GDDR5 к GPU. Ток драйвера устанавливается резисторами

Страница GPU Baffin FB
99_GDDR5 VRAM FB 1 [104]
100_GDDR5 VRAM FB 2
Подключение самих чипов GDDR. Шина X32 идет на каждый чип, практически аналогично DDR4. Терминация клоков, настройка силы драйверов.
![Страница GDDR5 VRAM FB 1 [104] Страница GDDR5 VRAM FB 1 [104]](https://habrastorage.org/r/w1560/getpro/habr/upload_files/a32/de9/35b/a32de935be036f0daafb291c471f9e50.png)
Страница GDDR5 VRAM FB 1 [104]
102_GPU Baffin GPIO/CLK/Straps
Различные настройки для GPU, SPI-Flash для загрузки настроек в чип. Также можно заметить тактовый генератор с точностью 20ppm. Хотя опция с кварцем была также доступна.

Страница GPU Baffin GPIO/CLK/Straps
103_GPU Baffin DP/GPIO
На этом листе расположены управляющие сигналы GPU, DP для мостов PCIe/DP <-> TBT, отладочный JTAG, I2C и немного питания с фильтрами. Справа на листе стоят загадочные конденсаторы CA8800, CA8801 с последовательными резисторами. Возможно, они предназначены для установки полосы PLL либо для фильтрации питания.

Страница GPU Baffin DP/GPIO
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
107_USB-C T Support
108_USB-C PORT CONTROLLER A
109_USB-C PORT CONTROLLER B
110_USB-C CONNECTOR A
На этих страницах идет полное повторение ранее разобранных страниц.
18_CPU/PCH Merged XDP
Отладочный разъем XDP. На него приходит большинство отладочных сигналов, сигналы критичные для работы платформы.

В XDP разъем втыкается шлейф от голубой коробочки. Далее вы выбираете тест для системы, его параметры и идете отдыхайте. Тем временем Bluebox общается с CPU, PCH по JTAG, проверяет необходимые сигналы.

119_DFU TEST POINTS
120_FCT TESTPOINTS 2
121_ICT, MAC-1 ,EE Testpoints
На этих страницах представлены тестовые точки для ICT и ручного тестирования. Такие вещи облегчают жизнь, особенно они нужны на первых этапах разработки.
Заключение
В этой части мы затронули много архитектурных и схемотехнических вопросов. Есть интересные схемотехнические решения, как, например, с PECI. Достаточное внимание отведено удобству отладки и тестирования, что радует. С архитектурой же есть несколько важных нюансов.
Основное и самое важное: 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.
Благодарю всех, кто осилил обе части. Постараюсь в будущем разобрать более современные схемы Apple или других известных производителей. А кому интересно больше про проектирование электронике, можете заглянуть в мой канал.
