Easyelectronics.ru

Электроника для всех
Текущее время: 17 ноя 2017, 22:26

Часовой пояс: UTC + 5 часов



    • 10 шт. 2-слоя 100*100mm 2$. Быстрый заказ: JLCPCB.com
    • JLCPCB - это крупнейшая фабрика PCB прототипов в Китае.
    • Имеющий более 290,000 клиентов и выполняющий более 8,000 заказов в день.
    • LCSC - Крупнейший китайский онлайн магазин радиодеталей.

Начать новую тему Ответить на тему  [ Сообщений: 62 ]  На страницу Пред.  1, 2, 3
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: 11 июн 2016, 19:34 
Заглядывает иногда

Зарегистрирован: 27 дек 2012, 17:46
Сообщения: 51
Конечно интересно!
Пиши всё что знаешь!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прошивка STC15
СообщениеДобавлено: 12 июн 2016, 01:02 
Старожил

Зарегистрирован: 27 мар 2015, 01:22
Сообщения: 947
Во-первых, снимаю шляпу перед автором программы stcgal.
Большая часть ниженаписанного просто пересказ его документации и питоновских исходников )

После подачи питания, мк ждёт, что хост пришлёт ему серию байтов 0x7F (не менее 11 штук) на скорости 2400 (формат - 8 бит, 1 стоп, чётность even).
Если такая серия не приходит, то мк через некоторое время просто начинает выполнение пользовательской программы.
Байты 0x7F используются как калибровочный временной интервал 7/2400 с
_-------_--|_-------_--

На серию 0x7F мк отвечает первым пакетом 0x46 0xB9 0x68 0 7 0x80 0 0xEF 0x16.
Все пакеты имеют одинаковую структуру:
первые два байта - начало пакета - 0x46 0xB9, всегда одинаковые;
третий байт - от кого кому - 0x68 от мк к хосту или 0x6A от хоста к мк;
четвёртый и пятый байты - длина пакета - 7 (без учёта 0x46 0xB9);
шестой байт - тип пакета - 0x80;
два предпоследних байта - контрольная сумма - 0x00EF (просто сумма всех байт 0x68+0+7+0x80, но опять без учёта 0x46 0xB9);
последний байт - конец пакета - 0x16, всегда одинаковый.

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

Хост отвечает подтверждающим пакетом 0x80, и следом за пакетом шлёт ещё одну серию 0x7F (не менее пяти штук).
МК отвечает большим пакетом (длина 64 байт и плюс 0x46 0xB9 - итого 66 байт) всяческой информация о своих параметрах.
Некоторые интересные байты:
байт 1 - тип 0x50;
байты 2-9 - четыре выборки двух-байтного счётчика для оценки тактовой частоты мк (частота = счётчик/7*2400*12, т.е. подсчёт с делителем 12 за интервал 7/2400 с, для этого и была нужна серия 0x7F от хоста);
байты 21-22 - идентификатор модели мк;
байты 24-36 - 13 байт опций конфигурации мк (в stcgal они называются msr - model specific registers), в первых трёх и последнем - разные флажки, в четвёртом-пятом значение настройки тактового генератора (в stcgal это называется trim value);
байты 52-58 - семь магических байтов неких параметров, которые хост должен будет передать мк обратно (без какой-либо обработки) в одном из пакетов дальше.

Хост отвечает подтверждающим пакетом 0x50 0 0 0x36 1 <двух-байтный идентификатор модели мк>.
МК отвечает пакетом 0x8F.

Дальше начинается самое веселье )
Чтобы заливать прошивку хосту и мк надо переключиться с 2400 на повышенную скорость.
Казалось бы можно попытаться сделать это и на текущей тактовой частоте, но вместо этого хост перестраивает тактовый генератор мк на некую предопределённую частоту (видимо ещё и в зависимости от модели мк).

Хост шлёт мк пакет с таким содержимым:
байт 1 - тип 0x65;
байты 2-8 - семь магических байтов неких параметров, которые мк раньше передал хосту в пакете 0x50;
байты 9-11 - 0xFF 0xFF 6;
байт 12 - кол-во пробных перенастроек тактового генератора;
байты 13-14 - параметры первой настройки;
байты 15-16 - 2 0;
байты 17-18 - параметры второй настройки;
байты 19-20 - 2 0;
и т.д. в соотв. с кол-вом, заданным в байте 12.
Следом за пакетом хост шлёт ещё одну серию 0x7F (не меньше чем <кол-во проб>*2+1)

Пара байт параметров настройки тактового генератора выбирается из вот такого странного ряда:
0x1800-0x18FF - 5-8 МГц
0x5800-0x58FF - 10-16 МГц
0x9800-0x98FF - 19-33 МГц
0xD800-0xD880 - 30-38 МГц
Но соответствие очень приблизительное и может сильно различаться от мк к мк.

МК отвечает хосту аналогичным пакетом, но с соотв. значениями счётчика (тактовая частота = счётчик/7*2400*12) для каждой пробы:
байт 1 - тип 0x65;
байты 2-8 - те же семь магических байтов;
байты 9-11 - 0xFF 0xFF 6;
байт 12 - кол-во пробных перенастроек;
байты 13-14 - параметры первой настройки;
байты 15-16 - счётчик первой настройки;
байты 17-18 - параметры второй настройки;
байты 19-20 - счётчик второй настройки;
и т.д.

Хост может посылать пакеты типа 0x65 несколько раз, пересчитывая счётчики в частоту и сужая диапазон параметров, чтобы определить какие параметры соответствуют нужной частоте.
Программа от stc делет такую калибровку только для тактовой частоты заданной пользователем, на которую настраивается мк после прошивки, а для заливки прошивки просто устанавливает параметры 0x9880.
Программа stcgal делает калибровку для двух частот - заданной пользователем и 22118400 для заливки прошивки.

Наконец, хост шлёт мк пакет типа 0x8E для переключения на повышенную скорость:
байт 1 - тип 0x8E;
байты 2-3 - параметры настройки тактовой частоты (0x9880 для stc-шной программы);
байт 4 - N (stc-шная программа: 5 для скорости 57600, 7 для 38400, 14 для 19200, 28 для 9600);
байт 5 - 0x101 минус <частота>/<скорость>/N, т.е. это готовое значение для 8-битного таймера;
байт 6 - 0x64;
байты 7-8 - 0x10000 минус <частота>/1200, т.е. это готовое значение для 16-битного таймера;
байты 9-12 - 0x81 0x20 0xFF 0x0.

После этого хост переключается на новую скорость и уже на этой скорости получает от мк пакет типа 0x84.
Этот пакет почти полная копия хостового пакета 0x8E, отличия только в байте типа и добавлении 13-ого байта, дублирующего первый байт контрольной суммы хостового пакета.

В ответ хост шлёт мк пакет тоже типа 0x84 - стирание внутреннего флэша мк:
байт 1 - тип 0x84;
байты 2-3 - 0xFF 0;
байт 4 - кол-во блоков (по 256 байт) для стирания, должно быть чётным, т.к. стирание постраничное, а страница - 512 байт;
байт 5-6 - 0 0;
байт 7 - общее кол-во блоков флэша в мк;
байты 8-19 - 12 нулей;
байты 20-53 - 34-х байтная последовательность 0x80 0x7F 0x7E 0x7D ... 0x5F.
МК отвечает восьми-байтным пакетом типа 0, после этого хост начинает передачу данных прошивки.

Хост передаёт данные серией пакетов, по 64 байта в пакете:
байт 1 - тип 0;
байты 2-3 - 0 0;
байты 4-5 - адрес данных (кратный 64);
байт 6 - 0;
байт 7 - размер данных (всегда 64);
байты 8-71 - данные.
На каждый пакет данных мк отвечает двух-байтным подтверждающим пакетом:
байт 1 - тип 0;
байт 2 - контрольная сумма (просто младший байт суммы 64 байт данных).

По окончании передачи данных хост шлёт финальный пакет 0x69 0 0 0x36 1 <двух-байтный идентификатор модели мк>.
МК отвечает пакетом 0x8D.

В ответ хост шлёт пакет конфигурации:
байт 1 - 0x8D;
байты 2-14 - 13 байт опций конфигурации мк;
байты 15-20 - шесть 0xFF.
МК отвечает подтверждающим 41-байтным инфо-пакетом типа 0x50.

И, наконец, хост заканчивает всю эту бодягу последним безответным пакетом 0x82.

_________________
mcu.goodboard.ru


Последний раз редактировалось vt340 27 июн 2016, 11:22, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прошивка STC15
СообщениеДобавлено: 27 июн 2016, 11:00 
Старожил

Зарегистрирован: 27 мар 2015, 01:22
Сообщения: 947
Перебрал всё что нашёл для программирования x51, ну кроме тяжёлых ide, остановился на as31, emu8051 и d52

_________________
mcu.goodboard.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прошивка STC15
СообщениеДобавлено: 27 июн 2016, 11:25 
Старожил
Аватара пользователя

Зарегистрирован: 28 дек 2011, 11:24
Сообщения: 3490
Откуда: г. Липецк
У AS51 какие то не стандартные директивы?
Цитата:
.FLAG symbol1, symbol.[0-7]
Sets symbol1 to the bit address specified by the symbol.[0-7] expression, where [0-7] denotes a character between 0 and 7. The resulting bit address is checked to see if it is a valid bit address.
.SKIP expr
Adds the value of expr to the location counter. Used to reserve a block of uninitialized data. Expr should be in bytes.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прошивка STC15
СообщениеДобавлено: 09 июл 2016, 11:29 
Старожил

Зарегистрирован: 27 мар 2015, 01:22
Сообщения: 947
Подпрограмма выдачи дампов памяти для stc15f10x, 60 байт в бинарнике.
В ответ на серию байтов от хоста 0, 0xff, 0xff, 0xff ... мк выдаёт содержимое памяти.
Сколько 0xff получит - столько байт памяти выдаст, начиная с нулевого адреса.
Скорость хостового последовательного порта - любая в пределах 0.001-0.004 тактовой частоты мк.


Вложения:
dump.txt [1.9 Кб]
Скачиваний: 82

_________________
mcu.goodboard.ru
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прошивка STC15
СообщениеДобавлено: 06 сен 2016, 01:33 
Здравствуйте!

Зарегистрирован: 26 авг 2016, 18:39
Сообщения: 3
vt340, день добрый, хотелось бы узнать, с STC11F04 такой же принцип работы предстоит примерно? Больше на форуме не нашел тем с микроконтроллерами этих серий... Хотелось бы узнать, есть ли возможность считать исходную прошивку из такого контроллера ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прошивка STC15
СообщениеДобавлено: 06 сен 2016, 10:05 
Старожил

Зарегистрирован: 27 мар 2015, 01:22
Сообщения: 947
Я не знаю подробностей про stc11, но принцип такой-же, протоколом можно только писать, читать похоже невозможно.
Наверно можно попробовать считать часть прошивки - записать маленькую программу в начало флэша, которая сольёт в uart содержимое флэша.
Но это только если получится записать в начало без стирания всего флэша.

_________________
mcu.goodboard.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прошивка STC15
СообщениеДобавлено: 07 сен 2016, 14:06 
Здравствуйте!

Зарегистрирован: 26 авг 2016, 18:39
Сообщения: 3
vt340 писал(а):
Я не знаю подробностей про stc11, но принцип такой-же, протоколом можно только писать, читать похоже невозможно.
Наверно можно попробовать считать часть прошивки - записать маленькую программу в начало флэша, которая сольёт в uart содержимое флэша.
Но это только если получится записать в начало без стирания всего флэша.

Спасибо. Будем изучать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прошивка STC15
СообщениеДобавлено: 14 ноя 2016, 05:47 
Заглядывает иногда

Зарегистрирован: 17 май 2012, 02:39
Сообщения: 33
Недавно китайцы запустили новую серию — STC8.
Даташит пока только на китайском. Ещё есть хэдер, в котором проще разобраться, чем в даташите (некоторые регистры отличаются от STC15).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прошивка STC15
СообщениеДобавлено: 19 дек 2016, 22:46 
Старожил

Зарегистрирован: 21 дек 2014, 15:02
Сообщения: 783
А можно как то слить прошивку с контроллера STC15W408AS ? Подгорела такая микруха, прошивку нужную не нашел -один вариант слить со старой и залить на новую.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прошивка STC15
СообщениеДобавлено: 20 дек 2016, 15:31 
Старожил

Зарегистрирован: 27 мар 2015, 01:22
Сообщения: 947
GT7 писал(а):
А можно как то слить прошивку с контроллера STC15W408AS ? Подгорела такая микруха, прошивку нужную не нашел -один вариант слить со старой и залить на новую.
Нет, я думаю, это невозможно

_________________
mcu.goodboard.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прошивка STC15
СообщениеДобавлено: 21 дек 2016, 17:50 
Старожил

Зарегистрирован: 21 дек 2014, 15:02
Сообщения: 783
vt340 писал(а):
GT7 писал(а):
А можно как то слить прошивку с контроллера STC15W408AS ? Подгорела такая микруха, прошивку нужную не нашел -один вариант слить со старой и залить на новую.
Нет, я думаю, это невозможно


А прошивку на контроллер т12 на этой схемке найти возможно?


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 62 ]  На страницу Пред.  1, 2, 3

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB