Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить

Re: Котуинко

Вт апр 27, 2021 10:25:34

Только у АТ89S нет "постраничного стирания" - исключительно общее стирание

разве в п. 4 по другому написано?
4.      If the serial programming mode is enabled then send the chip
Если включен режим последовательного программирования, отправьте команду стирания чипа

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

Re: Котуинко

Вт апр 27, 2021 14:28:51

Ну ужшш совсем наезд делаемс!
Это как без общего стирания заново программный код в кристалл "старого образца" вколошматить да с нулевого адреса?
Я уж думал - еррата какая нашлась с чем неведомым (а-ля постраничная предподготовка или чего подобного - ссыль просмотреть надо комп сменить).
:sleep:
Скорее где-то ошибка... Слишком много "хотелок" сразу реализовать это уж наглость.
:))
Вечерком еще очередные тесты помурыжу - досадко - времени много жрут при проверке после каждой поправке.
8)
Собственно само общее стирание не всегда обязательно - если в ПЗУ на интересующем нас участке ничего не записывалось после предыдущего стирания, то побайтовыми командами можно чего-то нового добавить, не затрагивая уже имеющийся код.
Или сбросить байтик - другой в NOP -
так раньше корректировку программ "заплатками" делали (в том числе и в автономных ПЗУ).
:roll:

Re: Котуинко

Вт апр 27, 2021 15:07:05

шо опять? Экое богатое воображение. Это про "наезд". И опять спрошу - где, в каком посте?
Ссыль можно не смотреть, а вот посты читать надо - там прям алгоритм из сыля скопипащен, для удобства пользователей.
Называется это - Algorithm for Page write mode (Алгоритм для режима записи страницы).
Заголовок там в сыле - AT89S51/52 ISP Programmer – Memory Write, полезно почитать для первооткрывателей программаторов (имхо). И лучше (имхо) придерживаться сего алгоритма - тогда и "досадко" не наступит, и время "жрать" не будет.

Re: Котуинко

Вт апр 27, 2021 20:47:27

Ох и охота ж Вам, УВАЖАЕМЫЙ oleg110592 меня достать!
8)
При том, что в данном случае, нихрена таки по сути вопроса не предложив, окромя и так уже до дыр перечитанных даташитовых данных.
:sleep:
А там таки есть "недокументированный" подвошек - правда совсем не в том месте, где первоначально предполагалось.
:wink:
Опять флуда море, а добычу данных мои собственные тесты обеспечивают.
Вобщем все прекрасно работает, ежли знать те "нюёнсы".
Сокращение суммарного времени с 25 до 7 минуток (кварц 4 МГц) при условии, что скан обнаруживает "грязное" ПЗУ.
При "чистом" время несколько увеличивается (первичное сканирование "чистоты" - побайтовое).
Чуток позднее подредактирую да положу и схемку и прожку.
:write:
:beer:

Re: Котуинко

Вт апр 27, 2021 21:32:34

Неохота.
Даташита сразу, ранее написал - достаточно, зачем еще что-то предлагать. :dont_know:
Правда еще "ссылей" с готовыми решениями для примера накидал - больше "ни хрена" не буду, раз нечитатель.
Флуд тоже написал берется откуда. Например 1/2 предыдущего сообщения - флуд. Соответственно порождает в ответ флуд. Но за собой обычно автор флуд не видит - это нормально. :)))
7 минут многовато. Насколько помню был давно у меня самодельный LPT программатор с программой написанной поляком, то прошивался AT89S51 , ну пару десятков секунд от силы. Так же и авры шил быстро, в зависимости от тактовой. В дудке между авр и S51 практически по временам отличия незначительны. Тритон по SPI тоже быстро было и параллельно тоже быстро.

Re: Котуинко

Вт апр 27, 2021 23:26:03

Скорость прошивки при одном и том же алгоритме зависит от кварца у МК (или внешнего тактового сигнала, ежли таковой предусмотрен на панельке).
Помимо прочего затраты на тесты - перед началом прошивки на "чистоту" и при прошивка на верность данных.
Частный случай - разброс параметров.
К примеру у моих теста экземпляров
AT89S51 и AT89S52 временные интервалы для стабильного тактирования оказались чуток разными - у AT89S52 практически по даташиту, а для AT89S51 пришлось длительность тактового ISP и время задержки после общего стирания чуток увеличить.
Самая большая вредность в применении постраничного чтения... Ряд тестов даёт основание считать, что страничное чтение даёт верный результат лишь в случае, когда оно запускается или сразу за общим стиранием или сразу за блоком страничной записи.
Если запустить страничное чтение сразу после активации режима последовательного программирования то будут учитываться недостоверные данные.
Самое интересное - обычно это вариант теста на "чистоту" - если без возврата кода ячейки с ошибкой то такой нюанс даже незаметен будет - все равно имеем несоответствие 0xFF.
А вот "задержанная верификация" - неверные данные уже проблема. Похоже и раньше с подобным сталкивался на "любительских" версиях с STK200 - но там посчитал за случайную нестабильность.
Главное таки удалось отловить эту "особенность".
:hunger:

Re: Котуинко

Ср апр 28, 2021 08:11:45

Скорость прошивки при одном и том же алгоритме зависит от кварца у МК

это прям открытие года - об этом написано в документации:
The frequency of the shift clock supplied at pin SCK/P1.7 needs to be less
than the CPU clock at XTAL1 divided by 16

Если запустить страничное чтение сразу после активации режима последовательного программирования то будут учитываться недостоверные данные.

а в документации ничего и не написано при последовательном программировании про страничное чтение:
Any memory location can be verified by using the Read instruction which returns the
content at the selected address at serial output MISO/P1.6

см. раздел даташита 20. Serial Programming Algorithm пункт 4.
В переводе:
Любую ячейку памяти можно проверить с помощью инструкции чтения, которая возвращает содержимое по выбранному адресу на последовательном выходе MISO

Ячейку Карл!
И вообще (имхо) лучше записать все, а потом считать все и два буфера сравнить, будет тогда быстро. Терминал такого не сможет, верно? А дудка так делает.
Главное таки удалось отловить эту "особенность"

„Трудно найти в тёмной комнате чёрную кошку… особенно, если её там нет!“(с) Конфуций
з.ы. в этом посте нет прямого отрицания права, желания навязать, неаезда, охоты достать и пр. лабуды, только констатация факта :)

Re: Котуинко

Ср апр 28, 2021 08:45:49

BOB51 писал(а):Если запустить страничное чтение сразу после активации режима последовательного программирования то будут учитываться недостоверные данные.
когда-то очень-очень давно я тоже был озабочен изобретением велосипеда... Кому интересно - вот: ChipBoom

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

так что рекомендую не допускать отступления от документов - и проблем будет значительно меньше.

Re: Котуинко

Ср апр 28, 2021 09:31:09

О я был вдохновлен ChipBoom и вроде с ARV по почте в древние времена даже общались. Только Делфи с паскалем мне тогда не дался, а на фривасике получалось и сибилдере. Потом понял, что Делфи лучшее для разработки гуевых программ, в частности программаторов оболочек и даже типа скады на Делфи писал.
Наверное можно сейчас на Lazarus ChipBoom перевести (чтоб без зазрения совести на форуме выкладывать). И еще в линуксе Lazarus есть, а сабжевого терминала нету. И будет счастье создателю велосипедных программаторов под С51 микроконтроллеры. :)))

Re: Котуинко

Ср апр 28, 2021 09:42:55

К сожалению я таки верю тому, что вижу.
Если делаем прошивку, побайтово или постранично - не суть важно оба варианта одинаково верно данные записывают, а затем попытаемся сразу после перезапуска считать запрограммированный массив постранично получим несоответствие кодов.
Тот же вариант попроще/понятнее - ставим прошитый МК, даем команду активации режима последовательного программирования и далее просто считываем постранично дамп - в результате наблюдаем полное несоответствие считанного содержимому ПЗУ.
Это даже при том, что при прошивке в режиме "запись страницы, последующее считывание страницы и верификация считанного кода" верификация пройдена успешно (что также подтверждается независимой проверкой в параллельном режиме).
Постраничное чтение возвращает верный результат только если предваряется или общим стиранием или постраничной записью.
По крайней мере таков результат моих тестов с АТ89S51 и AT89S52. В документации никаких намеков на возможность такой ситуации я так и не нашел. Единственно что отметить можно - от постраничного варианта в дальнейшем для АТ89S..... постарались "отодвинуться" - в 256 байтовом виде он только у AT89S51/AT89S52 имеется.
Собственно из тех ошибок данных при попытке постраничной верификации или считывания сразу за входом в режим последовательного программирования и возник вопрос про интервалы.
Как оказалось - интервалы там не при чем, а вот последовательность применения постраничного чтения весьма актуальна.
8)

Re: Котуинко

Ср апр 28, 2021 10:25:43

По крайней мере таков результат моих тестов с АТ89S51 и AT89S52. В документации никаких намеков на возможность такой ситуации я так и не нашел

Это легко решается, если в документации нету "намеков на возможность" (никогда не встречал в доках намеки :o ) - значит нельзя допускать "такой ситуации". Это называется поиск приключений на пятую точку.

Re: Котуинко

Ср апр 28, 2021 11:51:04

Причем тут "поиск приключений"?
Речь о вполне логичном желании провести считывание кода (проверку содержимого) сразу после активации режима последовательного доступа в постраничном режиме.
Простой пример - есть контрольный дамп и есть МК.
Ставим МК, активируем режим последовательного программирования и запускаем чтение в постраничном режиме с последующей проверкой результата.
(Или по-Вашему "так низзя!!!"? :wink: )
Ничего "запредельного" - а вот в результате .... сплошь ошибки данных.
В то же время вариант:
ставим МК, активируем режим последовательного программирования, даем общее стирание, постраничную верификацию, постраничную запись с последующей верификацией и.... никаких ошибок!
При том, что программа то постраничного чтения/верификации - одна и та же.
Неуж-то никаких вопросов не возникнет?...
8)

Собственно сам

"ленивый прошивальщик биос" для КОТУИНКИ.

схемка
BASE_NANO_public.pdf
(136.67 KiB) Скачиваний: 236

СКОТчик:
s52prg_2.zip
(7.36 KiB) Скачиваний: 174

Собираем схемку.
Внешний источник +5 вольт обязателен - АТ89S51/S52 весьма требовательны в отношении питания во время программирования.
Включаем питание,
подключаем адуринку к компьютеру.
Запускаем IDE и загружаем прилагаемый скотчик.
После загрузки скотча в адуринку на ней зажигается штатный светик как указатель готовности к запуску на компьютере терминальной программы.
запускаем монитор порта IDE (установить скорость 9600 бод в окошке настройки)
нажимаем кнопу (штатный светик адуринки погаснет)
высвечивается приглашение установить МК в "кроватку"
ставим туда AT89S52 (можно и AT89S51 - будет строчка о несоответствии кристалла, но прошьется и ессно работать не будет ибо прошивка для AT89S52)
далее согласно сообщениям периодически нажимаем на кнопу управления и наблюдаем ход выполнения на терминале.
После заставки и первого нажатия выполняется чтение сигнатуры МК и LOC бит
результат выводится на терминал
если LOC биты не сброшены будет выполнена команда записи LB3:LB2:LB1 =0:0:0 (сброс лок-битов не проверялся макетом из-за отсутствия кристаллов с записанными)
далее выполняется тест "чистоты" ПЗУ - режим медленно-побайтовый (тестируется только область соответствующая загружаемому дампу, а не весь объём ПЗУ)
при выполнении теста высвечивается начальный адрес страницы , двоеточие и через некоторый интервал времени или "*" - "страница без ошибок" или
"ERROR on адрес байта : содержимое байта != 0xFF"
и управление сразу переходит к общему стиранию
затем идет повторная проверка "чистоты" но уже в постраничном режиме.
При обнаружении ошибки в этот раз после соответствующего сообщения с указанием адреса и данных первой встретившейся ошибки управление переходит к началу программы.
Если верификация после стирания прошла успешно предлагается продолжить работу после очередного нажатия управляющей кнопы.
Далее следует постраничная запись дампа с постраничной верификацией
процесс также сопровождается выводом начального адреса текущей страницы и последующей "звездочкой" после завершения верификации.
по окончании обработки всех страниц дампа выводится соответствующее сообщение и после нажатия кнопы возвращаемся в точку начала программы.
В случае обнаружения ошибки - индикация аналогична таковой при тесте на "чистоту" - только после "!=" будет корректное значение данных и программа будет ожидать нажатия кнопы для возврата к началу (установка кристалла).
В данном варианте терминалка выполняет исключительно роль индикатора хода работы.
Сам дамп вставлен в состав СКОТча в виде массива и не подлежит изменениям (но может быть заменен чем-то иным при желании).
Работу "внешнего светика" также макетом не проверял - лень ставить было....
Помимо "штатного" терминала IDE данная конструкция работает также с любым иным терминалом при установленных параметрах:
скорость 9600, 8 бит данных, паритет - none, 1 стоп-бит
максимальное время обработки не более 8 минут.
:beer:
Последний раз редактировалось BOB51 Чт апр 29, 2021 07:07:10, всего редактировалось 2 раз(а).

Re: Котуинко

Ср апр 28, 2021 12:35:42

Ставим МК, активируем режим последовательного программирования и запускаем чтение в постраничном режиме с последующей проверкой результата

Вот зачем так делать непонятно. Это из за терминала? Почему по простому не сделать, без запусков чтения. тем более в доке нету. Я бы снизошел и глянул, как люди УЖЕ СДЕЛАЛИ:

хоть по ссылкам не ходим, это так для народа:
https://github.com/ddhuy/at89sprog
# at89sprog
Программатор AT89S52 с использованием Arduino Mega 2560
8051 MCU: AT89s52
Программатор: Arduino Mega 2560 (Atmega2560)
Хост ПК: приложение Linux (дистрибутив Ubuntu 14.04)
Я пишу этот проект для себя, изучая встроенное программирование. Я новичок и начинаю с нуля.
Буду признателен, если вы поделитесь своими идеями по улучшению этого проекта.
Вы можете свободно получить этот проект для себя.

Студент Huy Dang написал же и не заморачивался. Цель тут в теме вроде простая - т.н. биос прописать, параллельный на потом.

Re: Котуинко

Ср апр 28, 2021 12:53:28

Заморочка исключительно из интереса к данной "особенности" (к возможным применениям в будущем или "в кладовку").
В принципе такая ситуация возможна - значит надо выяснить ограничения.
А в остальном - программаторы в параллельном варианте - достаточно "избитая" тема.
8)

Re: Котуинко

Ср апр 28, 2021 20:53:01

Альтернативный вариант прошиватора AT89S на Ардуино в пару шагов (изи)
1) Собираем схемку
Изображение
вывод RST на 8051 и вывод 10 на Arduino;
Контакт 8 (P1.7) на 8051 к контакту 13 на Arduino (SCK);
Контакт 7 (P1.6) на 8051 к контакту 12 на Arduino (MISO);
Контакт 6 (P1.5) на 8051 к контакту 11 на Arduino (MOSI).
Понадобится
1x кварц, менее 33 МГц,
2x конденсатора, около 33 пФ в зависимости от того, какой кристалл вы используете
Для схемы сброса:
1x резистор 10 кОм
1x конденсатор 10 мкФ
Микроконтроллер определенно может работать без схемы сброса, вам просто нужно вручную сбросить его после включения.
2) Скачиваем Ардуино ИДЕ (у кого не скачано).
Программирование с использованием Avrdude:
Arduino IDE поставляется с предустановленным avrdude. Более того, ArduinoISP, который также поставляется с IDE, поддерживает AT89S51 (AT89S52).
Сначала загрузите скетч с именем «ArduinoISP» на свой arduino. Скетч можно найти в разделе «Файл» -> «Примеры» -> «11.ArduinoISP» в Arduino IDE.
Затем вам необходимо добавить файл конфигурации avrdude, чтобы включить поддержку AT89S51 (52).
avrdude.zip
(30.46 KiB) Скачиваний: 156

выполните следующее:
"C:\Program Files (x86)\Arduino\hardware\tools\avr\bin\avrdude.exe" -C E:/avrdude.conf -c stk500v1 -P COM3 -p 89s51 -b 19200
путь к avrdude.exe может отличаться. Замените «COM3» на имя последовательного порта arduino, которое вы используете в качестве программатора. Замените «E:/avrdude.conf» на путь к загруженной конфигурации.
Стартуем, если все правильно - увидим сигнатуру:
Изображение
Чтоб прошить добавьте в строку дополнительный параметр:
-U flash: w: YOURPROGRAM.HEX
чтоб проверить:
-U flash: v: YOURPROGRAM.HEX
Документация avrdude:
https://www.nongnu.org/avrdude/user-man ... ude_4.html

з.ы. у меня самодельный stk500v2 - значит у меня уже есть программатор AT89S с помощью дудки

Re: Котуинко

Чт апр 29, 2021 07:07:45

Для постоянного применения возможно такой варианти будет удобнее тем, у кого уже имеется перечисленная в нем минимальная база средств (программы и оборудование).
Собственно вариант приставки КОТУИНКО пока еще не прорабатывался - то уже по результату можно будет сравнивать.
А вот моя "ленивая однократна прошивайка" (https://radiokot.ru/forum/viewtopic.php ... 7#p4023587) в случае одного - двух применений в пол-года будет подешевше и попроще - там всего-то целевой дамп прошивки в СКОТче поменять понадобится.
Да еще предварительно из бинарника код в массив перегнать.
:hunger:

Re: Котуинко

Чт апр 29, 2021 08:36:39

А вот моя "ленивая однократна прошивайка" ... подешевше и попроще - там Да еще предварительно из бинарника код в массив перегнать.

Почему дешевле - и там ардуино и там. И почему проще - надо код в массив перегонять. К стати почему то описание этого процесса в описании отсутствует - для начинающих не мешало бы просветить. Наверняка потребуется сторонняя программа. Еще наверняка как-то скопипастить в нужное место - опять нелепые телодвижения.
В альтернативном же способе только и всего что требуется, это изменить в строке -U flash: w: YOURPROGRAM.HEX название своей программы.

Re: Котуинко

Чт апр 29, 2021 11:11:02

Так прошивалка-то "однократно-целевая" - посему и нетуть описания "перевода".
Кого заинтересует и вопрос зададут - расскажу.
Однако в составе котуинко такой перевод изначально существует - эхо возврат принятого хекс файла.
Да и кудыть спешить - на очереди котуинкин вариант. а там никаких переводов не требуется - глотает обыкновенные хексы. Единственно вспоминать ранее написанное... уж года три прошло...
Правда там есть вариант "все с нуля" - но тоже... время...
Насчет ардуинок - они разные по ценам и "доставаемости".
Мега уж сильно кусь делает, версия с majorCore упирается в труднодоставаемость мег162/8515...
А нанка наиболее "универсальна" в том числе и с USB-TTL мостом.
Насчет "более жирных" программаторов - хорошо ежли оные уже имеются в наличии, но у меня из ранее применяемого SiProg да версия JDM (ранее STK200/AN589) вполне достаточно свои функции выполняющих.
Добавилась правда адуринка с "ардуино-ISP" да STLink.
И всего того вполне достаточно. Чего не хватит - можно на котуинку перевалить (как тот же вариант ранее сделанного программатора для АТ89Сх051).
А вот у кого база иная - ессно надо в соответствующем направлении действовать - на основе своих железяк.
8)

Re: Котуинко

Чт апр 29, 2021 11:48:26

Насчет ардуинок - они разные по ценам и "доставаемости".
А нанка наиболее "универсальна" в том числе и с USB-TTL мостом.

Дык скетч ArduinoISP будет и на нано и на многих платах работать (смотри официальную доку), так что все как раз удобно насчет "разные по ценам и "доставаемости"". Мега328 и там и там. А вот авторский скетч на других ардуинах то и не проверен, перед выкладыванием - (торопимся - "кудыть спешить").
Да и китайская ПОЛНОЦЕННАЯ уно уже внутренним USB-TTL мостом на алике всего то:
Изображение
Что-то сбоит внутренний куркулятор и логика чет хромает, печалька.

Re: Котуинко

Чт апр 29, 2021 14:34:59

А смысл "на других" проверять-то?
Без изменений можно на про-мини или UNO пересадить (что нанка, что про-мини, что UNO - в данном случае одно и то же).
Да и на АВР - совместимых вполне потянет - там же ни единой "внешней библиотеки" нету - меняем соответственно номера портов и пересаживаем.
Адуринка именно под подобное и готовилась.
Разве что для размышлямса перекрутить под другую платформу на МК другого семейства....
Но база основана на массиве в памяти - у меня для "не АВРок" необходимых данных нету (искать надо).
Или микроCD приспосабливать... Но то уже "не простейшее" решение будет - как идеи сгодиться, как практичное решение вряд-ли...
8)
Ответить