Полигон для творчества за 1500 р. Ч1: Позовите Кряка

в 8:01, , рубрики: Без рубрики
Полигон для творчества за 1500 р. Ч1: Позовите Кряка - 1

Приветствую вас, друзья! Не знаю как вам, а мне нравится разбирать всякие штучки, узнавать, как они работают, и применять их в своих проектах. По ходу дела начинается настоящее увлекательнейшее расследование, технический детектив.

На этот раз меня заинтересовала плата с разными микросхемами, которые могут пригодиться во многих затеях. А может из неё вообще получится удобная отладка? В любом случае, это очень интересно. Это тот самый творческий процесс, приносящий радость и заметно повышающий наши навыки и умения. А ведь они часто самое ценное, что дал проект и работа над ним.

Проведём расследование, поищем JTAG, узнаем способы и отследим разводку BGA, поработаем с ПЛИС, … и много других действительно интересных вещей. Кряк уже заинтересовался!

Как там у нас обычно? «Сломать, а потом читать инструкцию». Инструкций и документации нет, поэтому будем экспериментировать ломать! ☺

Такая плата – действительно целый испытательный полигон. Здесь можно попробовать свои силы в обратной разработке, считывании и копании прошивок, в работе с ПЛИС, микроконтроллерами, памятью и видеосигналом, и многое другое.

Это ещё и замечательный тренажёр. Ведь что не умеется, станет нашим навыком. Дорогу осилит идущий. Бонусом будет сама плата (n штук), заметно подросшее в процессе её исследования мастерство и отличное настроение! А ещё всем этим можно поделиться с сообществом.

Что ты такое?

Полигон для творчества за 1500 р. Ч1: Позовите Кряка - 2

Честно говоря, мне не удалось найти много полезной информации по плате SX100 у Novastar, что несколько странно. Гугление надписей на плате не дало каких-то результатов. Я писал в интернет-магазины, продающие подобное оборудование; людям, занимающимся ремонтом или какой-то ещё деятельностью, связанной с подобными платами; куда-то ещё. Но никто мне не дал или не захотел дать ответа. Плату я нашёл на барахолке. Продавец так же не признался, откуда плата.

Полигон для творчества за 1500 р. Ч1: Позовите Кряка - 3

Поэтому, наша плата могла использоваться внутри помещений. Или как сменный модуль видеопроцессоров, вроде таких:

Полигон для творчества за 1500 р. Ч1: Позовите Кряка - 4

Полигон для творчества за 1500 р. Ч1: Позовите Кряка - 5

Конкретно этот видеопроцессор несколько отличается, но есть масса других моделей. Расположение разъёмов бывает очень похожим на то, что есть на нашей плате.
А есть и платы интерфейсов для видеопроцессоров.
Надпись на штрих-коде снизу платы MFAB08215X0450000437. По надписям ничего внятного не нашлось. Рядом, видимо, дата производства.

Полигон для творчества за 1500 р. Ч1: Позовите Кряка - 6

Если подключить USB, то плата определяется так:

Полигон для творчества за 1500 р. Ч1: Позовите Кряка - 7

USBVID_0483&PID_57200000000001B
USBVID_0483&PID_5720&REV_0200
USBVID_0483&PID_5720
Nova 3D HD

Посмотрим, как выглядит NovaStar nova3D HD:

Полигон для творчества за 1500 р. Ч1: Позовите Кряка - 8

Похоже, но не совсем то.

На сайте fccid.io можно найти фотографии устройств снаружи и внутри, что может дать хорошие подсказки в разных ситуациях.

Для Nova3D HD тоже есть страничка, и можно посмотреть фото плат

В общем, опознать плату пока не удаётся. Но она всё равно кажется интересной, поэтому покупаем несколько штук для экспериментов.

Что интересного есть на плате?

Одна из первых ступенек обратной разработки – осмотр «пациента» и поиск документации и разных полезностей для микросхем.

На плате выделяются большие микросхемы: 

  1. FPGA ALTERA Cyclone IV EP4CE15F23C8N.
  2. SDRAM: одна W9812G2IH (1M×4 BANKS×32BIT), две M12L64322A (512K x 32 Bit x 4 Banks).
  3. Микроконтроллеры NUC123LD4AN0 (ARM Cortex-M0 32-bit) и STM32F207VET6.
  4.  ADV7612 (Dual Port 225 MHz HDMI Receiver) и ADV7511 (225 MHz HDMI Transmitter).
  5. LAN8720A(i) – Small Footprint RMII 10_100 Ethernet Transceiver.
  6. Две памяти W25Q128JVSQ – Serial Flash Memory. Одна для хранения конфигурации ПЛИС, вторая рядом с STM32 для чего-то ещё.

Также есть 16 микросхем 74hc245, пара генераторов, cdcs503 Clock Buffer/Clock Multiplier, dc-dc преобразователи и разная мелочь.

Документация на детальки сложена в папочке на Гитхабе.

Ещё у нас есть 2 разъёма HDMI, 1 Ethernet и USB мини.

На плате много посадочных мест под штыревые разъёмы с приятными названиями и любезно подписанными контактами:

Полигон для творчества за 1500 р. Ч1: Позовите Кряка - 9

Для удобства можно сразу припаять гребёнки:

Полигон для творчества за 1500 р. Ч1: Позовите Кряка - 10

Контакты для программирования микроконтроллера и памяти выведены на разъём, что очень удобно. По распиновке микросхем прослеживаем контакты:

Полигон для творчества за 1500 р. Ч1: Позовите Кряка - 11

Не лишним будет узнать, какие на плате присутствуют питающие напряжения. Плата питается от 5В, которые затем понижаются до 3.3В, 2.5В, 1.8В и 1.2В.

Полигон для творчества за 1500 р. Ч1: Позовите Кряка - 12

Полигон для творчества за 1500 р. Ч1: Позовите Кряка - 13

Полигон для творчества за 1500 р. Ч1: Позовите Кряка - 14

Как выяснить разводку микросхемы в BGA корпусе?

С выводными корпусами нет проблем: все выводы торчат наружу. А вот под корпуса с матрицей шариков подлезть не получается. И платы обычно не двух-, а многослойные. В этом и заключается сложность.

Рассмотрим способы определения разводки на примере ПЛИС, но многие приёмы применимы и для других типов микросхем.

План действий такой:

  1. Находим, с чем соединены выводы из внешнего ряда и наиболее важные выводы из внутренних рядов.
  2. Стараемся найти JTAG, чтобы начать манипулировать микросхемой. Это первая группа наиболее важных выводов.
  3. Ищем выводы тактирования. Это вторая группа.
  4. Управляя чипом по своему усмотрению, находим остальные выводы.

Куда подсоединены выводы микросхемы, можно найти с помощью лазающего мышонка:

  1. Берём мышонка, надеваем поводок.
  2. Запускаем зверёныша в лабиринт под корпусом.
  3. Вторым щупом тыкаем по плате и ждём, пока запищит.
  4. Помечаем место, где запищало и координаты мышонка.

Всё, связь есть!

Полигон для творчества за 1500 р. Ч1: Позовите Кряка - 15

Мышонок?! Где мышонок?!

Полигон для творчества за 1500 р. Ч1: Позовите Кряка - 16

«Лазающий мышонок» – это растянутая пружинка или другой удобный жёсткий проводок,

Полигон для творчества за 1500 р. Ч1: Позовите Кряка - 17

зажатый в любой подходящий «поводок»:

Полигон для творчества за 1500 р. Ч1: Позовите Кряка - 18

Пружинка удобна из-за своей тонкости и жёсткости. Выводов не видно, но считать их удобно по количеству щелчков при аккуратном проведении по выводам жёсткой проволочкой.

Конечно, это не самый удобный способ, но помогает довольно быстро найти места подключения внешнего ряда выводов BGA корпуса. Можно найти и для второго ряда. Может и дальше (не пробовал). Но с каждым следующим рядом становится труднее.

Способ удобно использовать для выборочного поиска наиболее важных вещей. Например, по распиновке из Pin planner в Квартусе видно, что по центру корпуса есть выводы тактирования.

Полигон для творчества за 1500 р. Ч1: Позовите Кряка - 19

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

JTAG, ты где?

Полигон для творчества за 1500 р. Ч1: Позовите Кряка - 20

Опытному глазу, вероятно, сразу видны эти выводы. Нет, это не те, которые подписаны JTAG ☺. Те относятся к STM32.

Ищем 5-6 выводов в линию или 10,12,14,20 выводов в 2 линии. В данном случае, видим 5 тестовых площадок около ПЛИС. 

Полигон для творчества за 1500 р. Ч1: Позовите Кряка - 21

Лазающий мышонок помогает нам найти часть выводов JTAG, которые оказались ближе к краю – TMS, TCK:

Полигон для творчества за 1500 р. Ч1: Позовите Кряка - 22

Как понять, где остальные?

С вывода RST обычно есть подтягивающий вниз резистор (Pull Down). Это нужно, чтобы поддерживать управляющий конечный автомат JTAG в состоянии сброса и не дать устройству войти в режим тестирования (вместо штатной работы) из-за какой-то помехи.

С выводов TDI, TMS подтяжка вверх (Pull Up).

Вывод TDO должен быть высокоомным выводом, без логического уровня (плавающим).
Для TCK рекомендаций нет.

Прозвонкой и лазающим диверсантом мы уже нашли TMS, TCK. Так же можно найти землю.

Остаётся определить, где TDI и TDO (TRST не обязательный). Для этого измеряем сопротивления между выводом и землёй, плюсом питания. Далее включаем питание и измеряем напряжения. По описанным признакам и имеющимся данным делаем выводы.

Полигон для творчества за 1500 р. Ч1: Позовите Кряка - 23

Некоторые популярные распиновки JTAG можно посмотреть тут. Подробнее про определение выводов JTAG можно посмотреть в статье про извлечение прошивки гаджетов или здесь. Сперва думал, что срочно нужно обзавестись Jtagulator/Jtagenium, но получилось обойтись простым мультиметром. Хотя, устройства эти заслуживают внимания.

Для удобства выведем JTAG на гребёнку, приклеенную к плисине на соплеклей и подпишем:

Полигон для творчества за 1500 р. Ч1: Позовите Кряка - 24

Полигон для творчества за 1500 р. Ч1: Позовите Кряка - 25

Напряжение +3,3 В нужно программатору для установки логического уровня. Ближе всего оказалась ножка памяти, с неё и возьмём напряжение.

Почему именно 3,3 В? Выводы JTAG подключены к IOBank_1. К этому же банку подключается часть выводов памяти, которая питается от 3,3 В.

Полигон для творчества за 1500 р. Ч1: Позовите Кряка - 26

К тому же, при измерении напряжений между выводом JTAG и землёй, затем плюсом питания было именно 3,3 В.

Как определить разводку остальных выводов микросхемы в BGA корпусе?

Снова рассмотрим на примере ПЛИС. Многие приёмы подойдут и для других типов микросхем.
Способы определения соединения остальных выводов:

  1. Генерация сигналов разной частоты.
  2. Даёшь сотни UARTов!
  3. Пограничное сканирование JTAG (сканирование межсоединений, JTAG Boundary Scan).
  4. Отпаять BGA корпус и прозвонить выводы, потом не смочь припаять обратно.
  5. Разделить плату по слоям, а затем склеить обратно.
  6. Рентген.
  7. Генерация сигнала и поиск его антенкой или, пробниками E- и H- полей (near field probes).
  8. Общение с людьми.
  9. Ваши варианты…

Увидеть проводники на внутренних слоях можно с помощью рентгена. Но нужно специальное оборудование и меры предосторожности. Также можно осторожно разделить плату по слоям, или отпаять BGA корпус и прозвонить выводы, но нужно ещё суметь его припаять обратно. Иначе придётся пожертвовать платой.

Если пофантазировать, то можно придумать ещё вариантов. Например, подавать на вывод изменяющийся сигнал и искать его маленькой антенкой или, лучше, пробниками E- и H- полей (near field probes). Вроде таких:

Полигон для творчества за 1500 р. Ч1: Позовите Кряка - 27

Но такой способ кажется более долгим (ведь сигналы нужно подавать по одиночке в момент времени) и требует дополнительного оборудования. Хотя, хорошие пробники можно сделать недорого своими руками.

Самым простым видится способ с частотами. Идея такая: берём тактовый сигнал с генератора, делим частоту на 2, подаём на вывод, делим на 2, подаём на вывод… Потом пробегаем с щупом осциллографа по плате и находим, где выскочила частота.

Если бы на плате не оказалось источника тактового сигнала или не удалось бы найти вывод, к которому он подключен, то можно было бы попробовать подать свой тактовый сигнал на уже найденный вывод ПЛИС.

Интересный и забавный вариант – повесить UART передатчик на каждый вывод ПЛИС и передавать строку с именем вывода (например, А5, W22, P7, AA15…). Можно попробовать реализовать UART как кольцевой регистр сдвига, передающий нужную строку, например АА15, разделённую на байты с добавлением старт и стоп битов.

Или использовать JTAG сканирование межсоединений. Но вариант с частотами мне кажется удобнее и намного проще.

Здесь у меня были опасения, что можно сжечь вывод микросхемы или плиски, если на них будут разные логические уровни. Измеряя напряжения на некоторых выводах, неожиданно заметил, что напряжение вывода уплывает на сотни милливольт, если коснуться его пальцем (нечаянно коснулся щупа). Это напомнило про плавающие выводы в третьем состоянии. Позже внимательно изучил даташиты на микросхемы и в некоторых было написано, что при включении или после сброса выводы как раз в третьем состоянии.

Ещё один интересный и увлекательный способ – общение с людьми. Такую плату купил не я один. Нашёл эту информацию в отзывах о товаре на Авито и из общения с продавцом. Через отзывы попытался найти контакты покупателей, надеясь хотя бы на небольшое сообщество вокруг платы. Людей было не много и далеко не всем удалось написать, так как контакты указаны не были, а продавец помочь связаться не захотел.

Среди успешных попыток, было обращение к человеку, который, видимо, занимается каким-то ремонтом и купил плату в качестве донора. Ему понадобился HDMI приёмник, и он его отпаял. Чтобы посмотреть, есть ли какие-то дорожки под микросхемой (или какая-то полезная информация), я попросил фото.

Полигон для творчества за 1500 р. Ч1: Позовите Кряка - 28

Очевидно, плату ему не жалко. И я предложил ему отпаять ПЛИС в BGA корпусе и прозвонить контакты. Работы вроде не очень много, но он не захотел. Это к лучшему, иначе выяснение разводки было бы не таким интересным и этой статьи могло бы не быть.

А ведь мог и согласиться. Поэтому такой способ тоже имеет место.

Тогда же я написал ещё одному покупателю (передаю привет!), с которым завязалось интересное общение, не прекращающееся до сих пор. Вот такие бывают приятные сюрпризы!

Пишем прошивку для ПЛИС

Конфигурацию для ПЛИС напишем в среде Quartus Prime v20.1 Standard Edition. Эта версия поддерживает семейство Cyclone IV. Использовать будем язык Verilog. Материалов для начала изучения языка много. Может пригодиться, например, этот или такой.

Как создать и настроить проект, назначить выводы, сделать компиляцию и другие важные настройки, можно найти в статье на замечательном сайте Марсоход. Выражаем его автору благодарность за труды!

Проверим, правильно ли мы нашли выводы JTAG и вход тактового сигнала:

Код перемычки.

module SX100_test
(
input in,
output out
);

assign out = in;	
endmodule

Сигнал с тактового входа (25 МГц) просто передаётся на найденный мышонком выход, где его уже поджидает щуп осциллографа.

Важный момент – выбрать состояние неиспользуемых выводов ПЛИС.

Выбираем пункт меню Assignments/Device –> Device and Pin Options –> Unused Pins. Самый безопасный вариант – входы в третьем состоянии.

Полигон для творчества за 1500 р. Ч1: Позовите Кряка - 29

Выбираем нужный стандарт по умолчанию, чтобы потом не выставлять его для каждого вывода.

Полигон для творчества за 1500 р. Ч1: Позовите Кряка - 30

Прошивать будем дешёвой копией программатора USB Blaster.

Полигон для творчества за 1500 р. Ч1: Позовите Кряка - 31

Перед прошивкой ПЛИС по JTAG не забываем сбросить внука, чтобы не мешал негодник…

Полигон для творчества за 1500 р. Ч1: Позовите Кряка - 32

Знакомьтесь, это внук – микроконтроллер NUC123LD4AN0, который загружает прошивку для ПЛИС из памяти (W25Q128JV, serial flash).

Полигон для творчества за 1500 р. Ч1: Позовите Кряка - 33

Как сбросить внука? Первая мысль – прижать вывод сброса Reset к земле. На всякий случай проверяем в даташите. Да, есть такое, так и сделаем. Оказалось, что вывод reset выведен на гребёнку рядом с выводом земли, что очень удобно, так как можно просто надеть перемычку:

Полигон для творчества за 1500 р. Ч1: Позовите Кряка - 34

Обычно при подаче питания начинают мигать установленные на плате светодиоды.
Сброс помог, светодиодики больше не мигают. Спалили…

Полигон для творчества за 1500 р. Ч1: Позовите Кряка - 35

Если перемычку убрать, то огоньки снова мигают ☺.
Прошиваем. Есть сигнал! Ура!)

Поиск выводов генерацией частот

Частоты получим из тактового сигнала 25 МГц с помощью счётчиков-делителей на 2.

Код счётчика

module clk_div_2
(
input clk_in, 
output clk_out
);

reg cnt=1'b0;

always @(posedge clk_in)	
begin
	
cnt <= cnt+1'b1;
end

assign clk_out = cnt;
endmodule

Установим n счётчиков. Сделаем 22 шт, так как при малых частотах их не очень удобно наблюдать осциллографом и можно нечаянно пропустить вывод с частотой. Меньшая частота получилась 5,9 Гц. Можно было бы поделить тактовый сигнал и на другие числа (а не на 2), чтобы получить больше частот и охватить больше выводов. Но и так достаточно удобно.

Код установки 22-ух счётчиков.

module top_clk_div_2
(
input CLK_IN,
output [21:0]CLK_OUT//Шина 22-ух выходов поделенной частоты
);

clk_div_2 clk_div_2_0(//Первый счётчик-делитель на 2
 .clk_in(CLK_IN),
 .clk_out(CLK_OUT[0])
 );

//Далее создаём ещё 21 экземпляр счётчиков
genvar y;//Счётчик для цикла
generate
for(y = 1; y < 22; y = y + 1 )
begin : clk_div_2_generation
//имя экземпляра не имеет значения в дальнейшем
  clk_div_2 clk_div_2_insts
  (
   .clk_in(CLK_OUT[y-1]),//На вход подаём выход с прошлого делителя
   .clk_out(CLK_OUT[y]) //
  );
end
endgenerate
endmodule

При поиске, где вылезла частота, приходится много считать номер вывода. Простые наклейки с нумерацией значительно ускоряют это дело:

Полигон для творчества за 1500 р. Ч1: Позовите Кряка - 36

Полигон для творчества за 1500 р. Ч1: Позовите Кряка - 37

Ну что, поиграем в «Морской бой» (мимо, попал, ранил, убил)?

Полигон для творчества за 1500 р. Ч1: Позовите Кряка - 38

Постепенно топим все корабли заполняем карту выводов ПЛИС:

Полигон для творчества за 1500 р. Ч1: Позовите Кряка - 39

Ориентироваться удобно на распиновку из PinPlanner в Квартусе:

Полигон для творчества за 1500 р. Ч1: Позовите Кряка - 40

В итоге получается что-то такое:

Полигон для творчества за 1500 р. Ч1: Позовите Кряка - 41

Карта выводов сделана в Экселе. Там же удобно собирать и другую информацию. Например, вот распиновка разъёмов PBD2-80 по бокам платы:

Полигон для творчества за 1500 р. Ч1: Позовите Кряка - 42

Файл целиком можно посмотреть здесь.
Эй, ты куда?! А как же выводы?

Полигон для творчества за 1500 р. Ч1: Позовите Кряка - 43

Ну всё не получишь колбасы!… Пора заканчивать ☺. Продолжение следует…

Полигон для творчества за 1500 р. Ч1: Позовите Кряка - 44


Автор:
Kopcheniy

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js