Easyelectronics.ru

Электроника для всех
Текущее время: 21 июн 2018, 23:12

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



    • JLCPCB - Платы прототипов всего за 2$ c бесплатной доставкой (при первом заказе)
    • 10 PCBs за $2 для 2 слоев, $15 для 4 слойной, $74 для 6 слойной платы.
    • Крупнейший китайский производитель прототипных плат. 290000+ клиентов & 8000+ заказов в день!
    • LCSC - Крупнейший китайский онлайн магазин радиодеталей.

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

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


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

Зарегистрирован: 27 мар 2015, 01:22
Сообщения: 1104
Во-первых, снимаю шляпу перед автором программы 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.

_________________
less is more


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

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

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

_________________
less is more


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

Зарегистрирован: 28 дек 2011, 11:24
Сообщения: 3625
Откуда: г. Липецк
У 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
Сообщения: 1104
Подпрограмма выдачи дампов памяти для stc15f10x, 60 байт в бинарнике.
В ответ на серию байтов от хоста 0, 0xff, 0xff, 0xff ... мк выдаёт содержимое памяти.
Сколько 0xff получит - столько байт памяти выдаст, начиная с нулевого адреса.
Скорость хостового последовательного порта - любая в пределах 0.001-0.004 тактовой частоты мк.


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

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

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


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

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

_________________
less is more


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

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

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


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

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


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

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


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

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

_________________
less is more


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

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


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


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

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


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

Сейчас этот форум просматривают: shalfey


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

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

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