Прошивка USBAsp для программирования SPI Flash. Ремонт домашней электроники

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

Хочу выразить благодарность некто ckoba за отличнейшую и подробнейшую статью с картинками и ссылками, рекомендую — статья о прошивке флешек с spi интерфейсом через lpt

Не без моего вмешательства подох биос в ноутбуке, сервис озвучил цену в 400 грн, я мягко говоря прихуел, и решил попробовать все сделать сам, микросхемку выпаять оказалось несложно, хотя она размерами 5 на 5 мм и с 8 ножкаме, поддеваем ножку швейной иглой, тыкаем паяльником и давим на иглу  в направлении от микросхемы наружу, главное сильно не греть, и не давить, а то или ногу микросхеме оторвете или дорожку на плате. И вообще луче это делать паяльной станцией. Отпаять микросхему не перегрев это только треть дела. В общем отпаял я ее от платы, сунул в спичечный коробок, и потащил на работу, а по дороге заехал на радиорынок и купил запчастей, надо 4 резистора на 150 ом, один конденсатор на 1 мкФ,  разъем типа папа для LPT порта, по умному он называется DB-25, еще можно купить батарейку на 3 вольта, а можно взять 3,3 вольта из компа.

Для проводков я разрезал кусок старого IDE шлейфа, у него как раз подходящий шаг, снимаем немного изоляции, буквально 3-4 мм, залуживаем, и остается только совместить микросхему и провод и слегка поработать паяльником. Паяйте осторожно везде пишут что флешки от перегрева дохнут.

ДЛя батарейки нашлась кроватка от старой матери, удобно же. Резисторы и кондер я припаял прямо к разъему.

 

Сперва я неправильно подпаял питание, и программа не хотела определять флешку,  не хотела разблокировать защиту от записи и писать, потом когда я припаял все как надо, флешка прошилась с первого раза.

Важно!!!

После прошивки, считайте ее обратно и сравните с исходным файлом который вы прошивали, если есть несовпадения то либо вы что-то не так спаяли, либо проводки слишком длинные. И еще иногда нужно подпаять минус не только к ножке разъема а и к его корпусу.

В статье ссылка на программу не работает уже, сайт переехал на другой адрес, вот правильная ссылка на прошивальщик флешек spi через LPT , так же не забывайте в биосе настроить работу LPT порта в двустороннем режиме epp+ecp.

На все про все, неспешно у меня ушло почти пол дня,  теперь осталось главное, запаять биос обратно в ноут, надеюсь все получится и ноут оживет.

Запись опубликована автором Администратор сайта в рубрике Просто так.

Схемы программаторов

материалы в категории

Программатор SPI FLASH под USB. Схема, печатная плата

Питается SPi FLASH программатор от USB выхода. Вот его схема

Печатная плата плата программатора под DIP и SMD корпуса

Внешний вид программатора

В архиве ниже: схема программатора, сама программа и печатная плата в формате lay.

Источник: http://meandr.org/

Как хранить данные в flash-памяти AVR

Некоторые особенности работы с (flash) памятью микроконтроллеров AVR (Arduino)

Если ОЗУ не хватает, то можно более эффективно использовать flash-память. Это возможно потому, что

— МК AVR имеют гарвардскую архитектуру.

Некоторые особенности микроконтроллеров AVR

Гарвардская архитектура — специальная архитектура ЭВМ, отличительной особенностью которой является то, что инструкции и данные хранятся отдельно на разных физических устройствах; канал инструкций и канал данных так же физически разделены.

Язык C/C++ разрабатывался не для гарвардской архитектуры. Тем не менее использование макро-опреденией позволяет устранить этот недостаток.

Проблемы памяти

Чтобы хранить данные в памяти программ (flash-память), можно используется макрос PROGMEM. Он помещается в декларации переменной перед инициализатором. Подробнее здесь http://microsin.net/programming/avr/avrstudio-gcc-progmem.html

Массив строк:

Чтобы поместить строки во flash, нужно явно объявить каждую строку:

И потом использовать новые символы в массиве:

Смысл приведенного кода очевиден — получение данных из массива происходит через указатель, выбираемый как 16-битное беззнаковое целое макросом pgm_read_word. Далее строка копируется функцией strcpy_P.

Имеется множество функций для манипуляции строками в памяти программ с индексом _P, работающих так же, как и обычные строковые функции.

Все эти функции с индексом _P также определены в заголовке

В оперативной памяти (RAM), есть три области:

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

«куча»(heap) — используется при вызове функций malloc() и free();

«cтек»(stack) — используется, когда одна функция вызывает другую.

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

Надо помнить, что:

1) все C-строки также хранятся в оперативной памяти

2) все C-строки также хранятся во флэш-памяти. Одна из задач, выполняемых при запуске С-кода, состоит в том чтобы скопировать все строки из флэш-памяти в оперативную память.

3) Флэш-память организована в слова.

Использование FLASH-памяти на Arduino

На самом деле макросом PROGMEM я никогда не пользовался. Вместо этого в Wirgin есть макрос F(),

который в принципе решает проблему. Типичный пример его использования, когда мало RAM и много FLASH:


Платы по низкой цене

Нажми на изображение, чтобы заказать в интернет-магазине:


Микросхемы памяти M25xxx представлены на рынке различными производителями. Они имеют одинаковый интерфейс и алгоритм работы. Далее будет представлена простенькая реализация библиотеки для работы с данной памятью.

Ссылка на DataSheet — M25P64.

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

Я использую микроконтроллер STM32L:

  • S = CS = PB0;
  • W = write protect = PB1;
  • H = hold = PA4;
  • SPI1 (PA5, PA6, PA7)

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

Кроме того вам нужно реализовать функцию задержки wait_us — см. код и см. datasheet (timeout).

Универсальная часть программы содержит сами функции управления микросхемой, описанные в datasheet. При вызове инициализации init_m25p, также вызывается функция драйвера — инициализация периферии, снимается аппаратная защита памяти, отключается hold, и выбирается микросхема для общения по SPICS.

При стирании памяти или ее записи, надо ожидать пока операции закончатся — для этого можно читать регистр status (бит WIP) и ждать пока он сбросится:

Все остальные функции также сделаны в соответствии с datasheet:

Пример работы:

Проект — m25p64 (keil v5).

Записки эмбеддера

Программатор SPIPGM

Этот простой программатор предназначен для программирования микросхем памяти с последовательным доступом (serial flash memory, SPI Flash ROM). К ним относятся несколько семейств 25ХХХХ разных производителей.

Может работать под Windows и под DOS. Данный вариант программатора рассчитан на микросхемы в корпусе DIP8 с питанием 3,3 В:

Подключается он к порту LPT. Из порта USB берется питание. Последовательные резисторы в шинах данных необходимы, чтобы не повредить микросхему 5-вольтовыми сигналами из параллельного порта. Малое количество деталей позволяет собрать его в стандартном корпусе разъема LPT:

Детали смонтированы просто на подходящем куске универсальной монтажной платы:

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

Скачать пакет файлов для программатора SPIPGM.

Добавить комментарий

Закрыть меню