Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Регистрируясь, я даю согласие на обработку данных и условия почтовых рассылок.
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр Собирайте грибы, готовьте и общайтесь. Экономический симулятор лесной фермы

Грибники и Кланы

Симуляторы, Стратегии, Фермы

Играть

Топ прошлой недели

  • solenakrivetka solenakrivetka 7 постов
  • Animalrescueed Animalrescueed 53 поста
  • ia.panorama ia.panorama 12 постов
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая «Подписаться», я даю согласие на обработку данных и условия почтовых рассылок.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Помощь Кодекс Пикабу Команда Пикабу Моб. приложение
Правила соцсети О рекомендациях О компании
Промокоды Биг Гик Промокоды Lamoda Промокоды МВидео Промокоды Яндекс Маркет Промокоды Пятерочка Промокоды Aroma Butik Промокоды Яндекс Путешествия Промокоды Яндекс Еда Постила Футбол сегодня
0 просмотренных постов скрыто
291
monobogdan
monobogdan
Посты о ремонте и моддинге ретрогаджетов.
TECHNO BROTHER

Мультитул для инженера: волшебная коробочка с I2C/SPI/UART/JTAG за 1.000 рублей⁠⁠

23 дня назад

Будучи творческим человеком и техногиком, я обожаю при первой возможности апгрейдить своё оборудование. Время от времени я мониторю маркетплейсы в поисках чего-то новенького и в этот раз я наткнулся на настоящий мультитул для Embedded-разработчика — контроллер I2C/SPI/UART/JTAG в одной коробочке и всё это всего за 1.000 рублей... Конечно я не смог пройти мимо этой штучки и в рамках сегодняшней статьи хочу рассказать что оно из себя представляет и как с ним работать. Жду вас под катом!

❯ Что за устройство?

На самом деле такой формат статей для меня «в новинку», до этого я ни разу не делал обзоров на оборудование. Да и мой инструментарий слишком зауряден, чтобы делать ещё одну статью уровня «почему Quciko T12 лучше любой 900M станции» или «почему Вам не стоит покупать компрессорный люкей в 2025 году». Однако обзоров на сегодняшний гаджет я не нашёл, несмотря на его огромную пользу как для Embedded-разработчиков и инженеров, так и мастеров по ремонту смартфонов, планшетов и ноутбуков.

Во время подготовки статьи о том, как я написал BIOS для игровой консоли от Waveshare, в рекомендациях мне попадались другие товары от этого производителя — в том числе и сегодняшний гаджет. Меня сразу привлекла возможность переключения 3v3->5v логики и обширный набор поддерживаемых шин. В официальной вики были описаны следующие характеристики:

  • Шины: 1x SPI с двумя чип-селектами (можно подключить до двух устройств на одну шину), 1x I2C, 1x JTAG (полноценный, с ресетом!) и 2x UART с дополнительными линиями CTS/RTS для совместимости с классическими COM-портами.

  • Используемый контроллер: WCH CH347. Некоторым читателям чип может показаться знакомым по аналогии с классическим CH341A.

  • Питание: 5В, 3.3В, потребление ~65мА на VBus. Есть самовосстанавливающийся предохранитель на «входе».

Waveshare — достаточно известный бренд, под которым реализуются одноплатные компьютеры, «бутербродная» периферия для них и инструменты.

Waveshare — достаточно известный бренд, под которым реализуются одноплатные компьютеры, «бутербродная» периферия для них и инструменты.

Я сразу смекнул, что смогу использовать гаджет как для восстановления программно-убитых устройств по типу КПК, так и для отладки своих собственных самоделок, благо набор шин к этому располагает. Устройство приехало ко мне примерно через месяц, в небольшом пакетике и брендовой коробочке, в которую входило само устройство, кабель USB Type-B (ну почему не Type-C?), Dupont-провода в IDC-коннекторе для всех шин, а также небольшой мануал. Нареканий к доставке кроме скорости не возникло.

Сам гаджет представляет из себя компактную металлическую коробочку с «ушками» для удобного крепления на столе или стене. Сверху расположена шпаргалка по распиновке и режимам работы CH347, а также светодиодные индикаторы для UART.

Разбирается гаджет очень просто: достаточно лишь открутить несколько винтов с обеих боковых пластин устройства и перед нами открывается вид на плату. Схемотехника здесь простейшая: самовосстанавливающийся предохранитель, линейный регулятор AMS1117, который питает контроллер и нагрузку на VCC (до ~600мА), сам CH347, а также набор ключей для согласования режимов работы. CH347 — это не просто ASIC, а вполне себе полноценный микроконтроллер, прошивку которого можно обновить, правда SDK для использования CH347 как МК производитель не предоставляет.

После подключения гаджет радостно зажег индикатор PWR, подтвердив свою работоспособность, а значит пришло время протестировать возможные варианты использования!

❯ UART

С UART всё просто и понятно: нам достаточно лишь выбрать желаемый режим работы (M0 — двухканальный UART, остальные режимы — UART + I2C/SPI или UART + JTAG) с помощью тумблера и подключить/припаять Dupont'ы к соответствующим пинам на плате. UART здесь достаточно быстрый: при двухканальном режиме работы, на UART0 можно добиться до 9Мб/с (мегабод), а на UART1 — до 7.5Мб/с.

Провода в разъёмы установлены не бездумно — у них есть цветовая маркировка и логика помимо «красный — VCC, чёрный — GND».

Провода в разъёмы установлены не бездумно — у них есть цветовая маркировка и логика помимо «красный — VCC, чёрный — GND».

В качестве теста я решил снять лог загрузки со своего проекта самодельной игровой консоли. Для работы с UART я привык использовать Putty: сначала я припаял RX/TX и массу, затем запустил Putty и выбрал COM-порт, соответствующий первому каналу, установил бодрейт в 115200 и включил консоль:

Всё работает! В целом, гаджет можно использовать и для прошивки более сложных устройств: например многие смартфоны и кнопочные телефоны всё ещё имеют альтернативный режим прошивки через UART, а ретро-телефоны Samsung и LG так вообще не имеют альтернатив — если нет специального JIG, то остаётся лишь вызванивать RX/TX с разъёма и подпаиваться напрямую к UART процессора!

❯ SPI/I2C

С SPI и I2C уже всё чуточку интереснее. Дело в том, что как вы уже могли понять — чип использует свой собственный проприетарный протокол для организации моста между программой на ПК и шиной данных. Для работы с этим протоколом производитель предоставляет уже готовую библиотеку для Windows начиная с 2000, так что возможно у чипа есть перспективы для оживления легаси пром. оборудования. Для Linux же есть альтернативные драйвера, которые пробрасывают CH347 как обычные spidev и i2c-dev устройства.

Драйвер можно скачать здесь

Драйвер можно скачать здесь

Для проверки коммуникации можно использовать специальную тестовую программу из SDK, которая позволяет отправлять произвольные данные и даже прошивать флэшки 25 'ой и EEPROM'ки 24'ой серии.

Давайте же попробуем написать что-нибудь полезное! Например, подключим к гаджету 1.8-дюймовый дисплей и что-нибудь на него выведем.

С разводкой дисплея проблем не возникает: SDO к MOSI, SCK к CLK, VCC к VCC и BL (питание подсветки), однако для управления DBI-дисплеями необходимы ещё две дополнительные линии: D/C (линия, определяющая как интерпретировать байт на входе), а также RESET для аппаратного сброса контроллера. И с этим проблем тоже не возникает: у контроллера есть как минимум четыре свободных GPIO, два из которых мы с вами и будем использовать для управления линиями дисплея — GPIO6 (CTS на UART1) и GPIO7 (RTS на UART).

Далее я начал изучать PDF-ку с документацией сомнительного качества и писать код инициализации. Начинается всё с получения контекста устройства с помощью функции CH347OpenDevice, которая принимает в себя индекс нужного контроллера в системе и возвращает непонятный идентификатор (вероятно WinUSB?). Интересно то, что в остальном API используется не идентификатор, а как раз тот самый индекс, который в большинстве случаев будет 0. Далее мы получаем информацию об устройстве и сверяем режим работы, если он отличается от нужного — выбрасываем исключение:

/* Initialize CH347 */
deviceHandle = CH347OpenDevice(deviceIndex);
if (!deviceHandle)
throw new std::runtime_error("Failed to open CH347 device");

mDeviceInforS info;
CH347GetDeviceInfor(deviceIndex, &info);
if (info.ChipMode != 1)
throw new std::runtime_error("Incorrect chip mode");

Далее настраиваем SPI-контроллер. На выбор есть все три существующих режима, настройки полярности и возможность вручную дергать один из двух доступных ChipSelect'ов, а также тайминги. Частота работы определяется предустановленным набором делителей — 60МГц, 30МГц, 15МГц и т.п. Не забываем настроить таймаут каждой USB-транзакции:

CH347SetTimeout(deviceIndex, CommunicationTimeout, CommunicationTimeout);

/* Initialize SPI bus & GPIO */
mSpiCfgS cfg;
memset(&cfg, 0, sizeof(cfg));
cfg.CS1Polarity = 0; /* CS0 = active low */
cfg.CS2Polarity = 0;
cfg.iActiveDelay = DefaultChipSelectDelay;
cfg.iByteOrder = 1;
cfg.iClock = 0;
cfg.iDelayDeactive = DefaultChipSelectDelay;
cfg.iIsAutoDeativeCS = 0;
cfg.iMode = 0;
cfg.iChipSelect = 0;
cfg.iSpiWriteReadInterval = DefaultChipSelectDelay;

if (!CH347SPI_Init(deviceIndex, &cfg))
throw new std::runtime_error("Failed to initialize SPI");

И инициализируем дисплей. Здесь есть важный момент: функция CH347GPIO_Set устанавливает состояние всего GPIO-контроллера в чипе и поэтому принимает в себя три битовые маски с конфигурацией каждого пина. Функции GPIO стандартные — вход/выход, плюс обработка прерываний с помощью специального callback'а:

CH347GPIO_Set(deviceIndex, 1 << config.IOReset, 1 << config.IOReset, 0);
this_thread::sleep_for(16ms); /* HW reset */
CH347GPIO_Set(deviceIndex, 1 << config.IOReset, 1 << config.IOReset, 1 << config.IOReset);

/* Software initialization */
SendCommand(EMIPICommandList::cmdSWRESET, 0, 0, 16);
SendCommand(EMIPICommandList::cmdSLPOUT, 0, 0, 0);

/* Framerate and refresh */
uint8_t frameRateControlRegister[] = { 0x01, 0x2C, 0x2D };
SendCommand(EMIPICommandList::cmdFRMCTL1, frameRateControlRegister, sizeof(frameRateControlRegister), 0);
SendCommand(EMIPICommandList::cmdFRMCTL2, frameRateControlRegister, sizeof(frameRateControlRegister), 0);
SendCommand(EMIPICommandList::cmdFRMCTL3, frameRateControlRegister, sizeof(frameRateControlRegister), 0);
SendCommand(EMIPICommandList::cmdFRMCTL4, frameRateControlRegister, sizeof(frameRateControlRegister), 0);

/* Power control */
uint8_t powerControlRegister1[] = { 0xA2, 0x02, 0x84 };
SendCommand(EMIPICommandList::cmdPWCTL1, powerControlRegister1, sizeof(powerControlRegister1), 0);

uint8_t powerControlRegister2 = 0xC5;
SendCommand(EMIPICommandList::cmdPWCTL2, &powerControlRegister2, sizeof(powerControlRegister2), 0);

uint8_t powerControlRegister3[] = { 0x0A, 0x00 };
SendCommand(EMIPICommandList::cmdPWCTL3, powerControlRegister3, sizeof(powerControlRegister3), 0);

uint8_t powerControlRegister4[] = { 0x8A, 0x2A };
SendCommand(EMIPICommandList::cmdPWCTL4, powerControlRegister4, sizeof(powerControlRegister4), 0);

uint8_t powerControlRegister5[] = { 0x8A, 0xEE };
SendCommand(EMIPICommandList::cmdPWCTL5, powerControlRegister5, sizeof(powerControlRegister5), 0);

uint8_t powerControlVCOMRegister = 0x0E;
SendCommand(EMIPICommandList::cmdPWCTL6, &powerControlVCOMRegister, sizeof(powerControlVCOMRegister), 0);

/* Addressing */
uint8_t madCtlMode = 0xC8;
SendCommand(EMIPICommandList::cmdMADCTL, &madCtlMode, sizeof(madCtlMode), 0);

uint8_t rasetRegister[] = { 0x0, 0x0, 0x0, 0x7f };
uint8_t casetRegister[] = { 0x0, 0x0, 0x0, 0x9f };
SendCommand(EMIPICommandList::cmdRASET, casetRegister, sizeof(rasetRegister), 0);
SendCommand(EMIPICommandList::cmdCASET, rasetRegister, sizeof(casetRegister), 0);

uint8_t colorMode = 0x05; /* RGB565 */
SendCommand(EMIPICommandList::cmdCOLMOD, &colorMode, sizeof(colorMode), 0);
SendCommand(EMIPICommandList::cmdDISPON, nullptr, 0, 0);

...

void CDisplay::SendCommand(EMIPICommandList command, uint8_t* data, size_t length, uint32_t delay)
{
uint8_t cmd = (uint8_t)command;

/* Send command */
GPIOSet(deviceIndex, config.IODataCommand, 0);
CH347SPI_Write(deviceIndex, 0, sizeof(cmd), sizeof(cmd), &cmd);

/* Send arguments (if any) */
if (data && length)
{
GPIOSet(deviceIndex, config.IODataCommand, 1);
CH347SPI_Write(deviceIndex, 0, length, length, data);
}

this_thread::sleep_for(chrono::milliseconds(delay));
}

Теперь можно запустить программу и посмотреть на результат. Если вы увидели шум (или мусор) на экране — значит вы всё делаете правильно и контроллер успешно проинициализирован.

На фото можно заметить перемычку между CS и массой, однако не все контроллеры дисплеев толерантны к постоянному низкому уровню на CS. На моей практике контроллеры ILI отказывались проходить инициализацию, если не разграничивать каждую транзакцию с помощью CS.

Теперь можно что-нибудь вывести. Подготавливаем изображение, преобразовав в 16-битный массив пикселей, переводим контроллер в режим записи в VRAM, отправляем изображение:

void CDisplay::CopyFrameBuffer(uint8_t* pixels)
{
uint8_t cmd = (uint8_t)EMIPICommandList::cmdRAMWR;

/* Send command */
GPIOSet(deviceIndex, config.IODataCommand, 0);
CH347SPI_Write(deviceIndex, 0, sizeof(cmd), sizeof(cmd), &cmd);

GPIOSet(deviceIndex, config.IODataCommand, 1);

uint32_t frameBufferSize = config.Width * config.Height * 2;
uint32_t offset = 0;

CH347SPI_Write(deviceIndex, 0, frameBufferSize, 2, pixels);
}

И пишем небольшую демо-программу:

int main(int argc, char** argv)
{
CDisplayConfiguration config = {
ChipSelectIndex, ResetGPIOIndex, DataCommandGPIOIndex, 128, 160
};
CDisplay display(config);
display.CopyFrameBuffer(beach);


return 0;
}

Результат — на дисплее появляется картинка!

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

❯ Заключение

Вот такой интересный гаджет выпустила компания Waveshare — и, что радует, по очень приятной цене! Ссылку по понятным причинам прилагать не буду, но при желании вы сможете его найти на всех трёх крупных маркетплейсах. Кроме того, можно купить Breakout-плату с тем же самым чипом за ~500 рублей, но там не будет таких удобных переключателей и Dupont'ов.

К сожалению, теста JTAG в статье не будет. У меня пока нет готовых к работе необычных гаджетов, где можно было бы протестировать OpenOCD... однако мой HTC Dream всё ещё ждёт свою прошивку модема!

А если вам интересна тематика ремонта, моддинга и программирования для гаджетов прошлых лет — подписывайтесь на мой Telegram-канал «Клуб фанатов балдежа», куда я выкладываю бэкстейджи статей, ссылки на новые статьи и видео, а также иногда выкладываю полезные посты и щитпостю. А ролики (не всегда дублирующие статьи) можно найти на моём YouTube канале.


Если вам понравилась статья...

И у вас появилось желание что-то мне задонатить (например прикольный гаджет) - пишите мне в телегу или в комментариях :) Без вашей помощи статьи бы не выходили! А ещё у меня есть Boosty.

Что думаете о таком преобразователе?
Всего голосов:
Что думаете об обзорах на оборудование? Есть смысл рассказывать о всяких ништяках, что я иногда покупаю для работы?
Всего голосов:

Подготовлено при поддержке @Timeweb.Cloud

Показать полностью 12 2
[моё] Опрос Покупка Гаджеты Обзор Embedded Своими руками Микроконтроллеры Spi Инженер Программирование C++ Длиннопост
57
2
Вопрос из ленты «Эксперты»
tired.cat

Помощь с RockChip3576⁠⁠

6 месяцев назад

Всем привет

Запарился с одной задачей и, возможно, у кого-то был похожий опыт.

Суть: Нужно принимать данные по SPI в режиме Slave. Пробовал на Raspberry Pi 4 — но, как оказалось, его кристалл аппаратно не поддерживает SPI Slave, ну как, поддержка есть, но кривая и нестабильная (скорость должна быть 921600, не вытягивает она).

Нашёл альтернативу — процессор RK3576 (например, в Banana Pi BPI-M5). В даташите вроде как есть нормальная поддержка Slave, но есть нюансы:

Железо — платы на RK3576 стоят 15-20к, и просто так купить для теста не вариант.

Софт — драйверы и настройка SPI Slave, конечно, потребуют возни, но это уже второстепенно.

Вопрос: Может, у кого-то уже есть такая плата и возможность проверить SPI Slave? Или был опыт работы с этим процессором?

Буду рад любым советам, мануалам или даже "да, это реально, но нужно сделать то-то".

Показать полностью
[моё] Нужен совет Одноплатный компьютер Без рейтинга Banana Pi Spi Вопрос Спроси Пикабу Текст
0
18
lapot344229
lapot344229
Сообщество Ремонтёров

Еноты и скорость светы. Все программаторы вам врут⁠⁠

7 месяцев назад

Вы чините ноутбуки?
Если чините, то ваш мир уже не будет прежним. Погнали.

Hi-End programmers - Программаторы относятся к высшему классу, и приводить сравнение с ними некорректно. Добавлены для только фона и только в эту таблицу.

Hi-End programmers - Программаторы относятся к высшему классу, и приводить сравнение с ними некорректно. Добавлены для только фона и только в эту таблицу.

Всем привет :)

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

Без цифр что-либо оценить сложно. Поэтому сделал примерное сравнение параметров.

Но так как основная статья уже написана - повторять её здесь нет смысла, и я просто тут размещу первую таблицу, и дам вам ссылку на полную статью.

Сравнение скорости и подробное описание других параметров с самыми популярными программаторами вот чуть ниже в зелёной ссылке :).

А здесь на Хабре полное описание и продолжение таблиц.

Показать полностью 2
[моё] Spi Flash Eeprom Windows Linux Android Bios Ремонт техники Электроника Материнская плата Компьютерная помощь Arduino Текст Ремонт ноутбуков Пайка Ремонт телефона Сборка компьютера Нужна помощь в ремонте Поломка Компьютерное железо Длиннопост
44
39
MiheevSanity
MiheevSanity
Arduino & Pi

Создал пульт управления звуком на ESP 32, для тренировки⁠⁠

11 месяцев назад

В 2024 году кроме нормального развития в программировании,
(Где так и не закончена единственная задача! В виде стабильности сети.) Включая изучения распределённых файловых систем, работы с 3D в браузере.

Под его конец создано первое рабочее физическое устройство.
Первой реализована одна из простых идей, всего которых уже не счесть.🫢

Пульт управления звуком, на основе ESP32 на C++.

Корпус спроектирован самостоятельно в FreeCad, многие элементы не имеют чертежа и нужно измерять самостоятельно штангенциркулем.
И распечатан самостоятельно в FDM принтере.


Пока соединение по WIFI🛜 в мобильное приложение на смартфоне, принимающее команды.
Но возможно использовать и Bluetooth.

Может регулировать громкость потенциометром,
переключать треки вперёд назад 5 позиционной кнопкой.
Считывая аналоговые и цифровые сигналы, и обмениваясь пакетами по UDP.
Посылая медиа-сигналы в смартфон, который уже запускает музыку.

Имеет 2 экрана, I2C и SPI. Позволяющих выводить как ЧБ так и RGB изображения.
Питается аккумулятором 18650.

За примерно 14 дней, в первую половину декабря. Не считая доставки.

В процессе был сожжён один DAC по неопытности.🥲
И несколько слабых блоков питания.
Получен огромный опыт за короткое время.

Начальный этап в создании собственных аппаратных устройств,
от мелочи для развлечения, умного дома и повышения удобства,
до целевых промышленных устройств на массовое производство.

Наивный первый шаг к реализации идей мирового масштаба.

Показать полностью 4
[моё] Arduino Инженер Электроника Esp32 Микроконтроллеры Spi Аккумулятор 18650 Fdm печать 3D печать Длиннопост
19
319
Gorro996
Сообщество Ремонтёров

Шьем биос через Atmega328⁠⁠

5 лет назад

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


День 1

Был прекрасный тихий вечер.

На улице мороз -30, а я в теплом доме с кружкой чая.

Неожиданно приходит глупейшая мысль "А почему все обновляют биос, а я нет?"

Ну а что же, надо действовать! Опыт какой-никакой!

Качаю прошивку, (msi) завожу через M-Flash, игнорирую табличку "данная версия bios не предназначена для вашего устройства", я же лучше знаю.

Загружаем....иии....получаю кирпич весом в 20 кг.


Тут можно было бы и закончить, отнести в сервис, выслушать всяческие издевательства со стороны сотрудников СЦ, заплатить за восстановление bios, и жить себе спокойно. Но кучерявые волосы на голове нашептали быть в душе Евреем, а значит будем восстанавливать своими руками, но уже завтра.


День 2

Разбираем кирпич на части, смотрим:


Flash bios в данном случае это то, на котором желтая бумажка с надписью E7673IMS

Прикидываем варианты.

Чем шьют bios? SPI программатором.

Но дома только ST-link, USB - UART TTL преобразователь, и куча различных МК.

Прибегаем к силе пикабу. Есть замечательный пост: https://pikabu.ru/story/programmator_2425_fleshek_na_arduino_5193861

Черпаем информацию, ага, SPI программатор на Arduino! Где то у меня была одна реплика..


Берем ноутбук своей женщины

Качаем ПО, шьем МК, и подключаем.

В вышеуказанном посте Arduino pro mini, у меня же реплика Arduino nano, распиновка отличается.

+ я запитывал от стабилизатора на 3.3в(а не от 5в, как в посте)

Хотел еще сделать делитель напряжения для понижения логических уровней,  но и так сойдет :)

Впаиваю огрызки витой пары напрямую в материнку к flash.


Итоговый результат:

Подключаем к ноутбуку, в программе выбираем размер flash(в моем случае 8192 кбайт), качаем на этот раз прошивку для МОЕГО bios, шьем 15 минут....

Пробный запуск....пост прошел!

Подключаем монитор и клавиатуру, повторяем, и...

Кирпич весом 20 кг снова становится рабочей машиной.


Эта история навевает воспоминаниями из детства. где подвигом было поменять настройки в bios, а о прошивке и речи не шло, так как все боялись случайного отключения эл.энергии

А сейчас можно убить, и без проблем восстановить bios, без "мам, пап и кредитов"


Это был мой первый опыт прошивки flash.

Спасибо за внимание, обсудить мою рукожопость можно в комментариях


P.S. Дамп старого биоса я снял перед тем, как всё умертвить, но цель была поставить именно новый


P.P.S. Если работает, не трогайте

Показать полностью 4
[моё] Ремонт Bios Arduino MSI Материнская плата Рукожоп Spi Длиннопост
123
546
HLEBAMARU
HLEBAMARU
Сообщество Ремонтёров

Garmin fenix 3HR ремонт. Замена SPI накопителя⁠⁠

6 лет назад

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

На включение и зарядку реакции нет. Разбираем. На АКБ 0. Следов воды, как это часто с ними бывает не оказалось. На контактах АКБ сопротивление в норме.

Пробуем заводить от ЛБП.

Картинка есть но на этом все.

Наученный опытом о бутлупе на часах и предистории клиента делаем вывод что проблема с ПО.
Можно кончено постучать в бубен и  попробовать прошить по  USB но это отнюдь не всегда прокатывает и мне лень тратить время. Действуем более радикально. Будем прошивать SPI накопитель напрямую.
Снимаем

Городим огород из проводов

И цепляем к программатору

Все никак руки не доходят вытравить платку под SPI флешки в BGA корпусе.. И так сойдет.
Читаем флешку и вытягиваем ESN и серийник. Правим заведомо исправный дамп

Проливаем в новую флешку, на всякий случай, вдруг родной нездоровится.
Накатываем шары и сажаем на место.

Часики бутнулись, Значит все путем и выводы сделаны верно

Собираем, тестим, отдаем клиенту.
Такие дела.
ЗЫ: да  коврик грязный, надо бы протереть

Показать полностью 9
[моё] Garmin Ремонт Spi Пайка Прошивка Длиннопост Мат
182
150
alex4984191
alex4984191
Сообщество Ремонтёров

"Программатор" 24\25 флешек на ардуино.⁠⁠

8 лет назад

Навеяно постом http://pikabu.ru/story/arduino_snova_vyiruchaet_5192318

Только 3 дня назад воспользовался сам этим проектом, думаю кому-то окажется полезным.

Успешно зашил 10 штук 25х флешей (2-2мб, 5-4мб, 3-8мб).

Собственно сам проект был взят у неизвестного товарища с сайта "технохрень" (не для рекламы). Далее текст из источника.



В общем это нужно чтобы перепрошивать 8 ножные SPI флешки. А это в свою очередь нужно чтобы восстанавливать роутеры, сбрасывать пароли на биосы и восстанавливать их, и много чего еще.

Будем делать за 10 минут самый простой программатор своими руками на Ардуино 🙂 Понадобится Arduino Pro Micro ну или любая другая (будет отличаться только распиновка на ардуино). Собираем эту сложную схему:

Сама прога-программатор:

Скачать софт http://skproj.ru/wp-content/uploads/2015/12/SpiEepromFlasher...


Вот прошивка (скетч) для ардуины:



#include "SPIFlash.h"

#include <SPI.h>

#include <avr/wdt.h>

//////////////////////////////////////////

// flash(SPI_CS, MANUFACTURER_ID)

// SPI_CS - CS pin attached to SPI flash chip (8 in case of Moteino)

// MANUFACTURER_ID - OPTIONAL, 0x1F44 for adesto(ex atmel) 4mbit flash

// 0xEF30 for windbond 4mbit flash

//////////////////////////////////////////

SPIFlash flash(2, 0);

byte buf[1024];

void setup() {

Serial.begin(115200);

while (!Serial);

if (flash.initialize())

Serial.println("Init OK!");

else

Serial.println("Init FAIL!");

}


void loop() {

char cmd;

if (!Serial.available()) return;

cmd = Serial.read();

if (cmd == 't') {

Serial.print("COM ok\n");

return;

}

if (cmd == 'i')

{

Serial.print("DeviceID: ");

Serial.print(flash.readDeviceId(), HEX);

Serial.print('\n');

return;

}

if (cmd == 'a')

{

flash.chipErase();

while (flash.busy());

Serial.print("OK");

Serial.print('\n');

return;

}

if (cmd == 'e')

{

long sector = Serial.parseInt();

Serial.read(); // разделитель

flash.blockErase4K(sector);

Serial.print("OK");

Serial.print(sector);

Serial.print('\n');

return;

}

if (cmd == 'w')

{

long addr = Serial.parseInt();

Serial.read(); // разделитель

for (int bufsz = 0; bufsz < 128; bufsz++)

{

while (Serial.available() == 0);

buf[bufsz] = Serial.read();

}

flash.writeBytes(addr, buf, 128);

Serial.print("OK");

Serial.print(addr);

Serial.print('\n');

return;

}

if (cmd == 'r') {

long addr = Serial.parseInt();

Serial.read(); // разделитель

for (int i = 0; i < 4; i++)

{

flash.readBytes(addr + (i * 1024) + 0, buf, 1024);

for (int j = 0; j < 1024; j++)

Serial.write(buf[j]);

}

return;

}

}



Ничего сложного и главное нет лишних деталей в схеме))) Главное правильные библиотеки — скачать их вместе с прошивкой тут: http://skproj.ru/wp-content/uploads/2015/12/spi-eeprom-fw2.z...


Пробовал на флешках 25Q128FVSG, 25L3206E, еще какая-то роутерная безымянная.


Как выяснилось программатор может иногда не работать 🙂 Вариантов несколько:

— либо слишком длинные провода к флешке (нормально см 8-15)

— либо слишком китайская ардуина (например нано в3)

— либо дохлая флешка



Лично сделал такое безобразие (платку под панельку развел, но еще не травил):

Как показала практика 3х вольтовые флешки отлично работают от 5и вольтовой линни, но для низковольтовых лучше все таки добавить преобразователь.


Отлично завелось от ПониПрога.

Показать полностью 4
Arduino Программатор Spi Сообщество arduino Сообщество ремонтеров Длиннопост
72
7
petrofun
Сообщество Ремонтёров

Dell XPS 17 L701x (GM7MB) Не шьется флешка EC, 25Q80BV⁠⁠

8 лет назад

Dell XPS 17 L701x (GM7MB)

DAGM7MB2AA0

Rev: A

Здравствуйте!

Первоначально проблема: нет загрузки с USB, пароль USER на биос.

Хороший человек прислал дамп с аналогичной платы.

Но столкнулся с проблемой - не шьется флешка мульта 25Q80BV - не подскажете в чем может быть проблема?

Не шьется ни старый ни новый дамп, после этапа programming выбивается ошибку ERROR! Code Address: 0x000000 Buf_val:0xFF IC_Val:0xFE

Проверку ID отключал.

Програматор TL866

Есть идея что проблема связана с напряжением питания флешки - может кто из опытных подскажет решение?

Спасибо!

[моё] Dell XPS Spi Tl866 Bios Текст
19
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Маркет Промокоды Пятерочка Промокоды Aroma Butik Промокоды Яндекс Путешествия Промокоды Яндекс Еда Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии