Здравствуйте!
Я хочу написать программу для загрузки прошивки в формате hex в микроконтроллеры AVR через загрузчик Chip45.
Загрузчик позволяет прошивать не программатором, а просто по USB (через аппаратный мост USB-COM, а точнее USB-UART).
В документации по работе с Chip45 написано, что необходимо использовать программный протокол управления потоком XON/XOFF.
В стандартных компонентах HiAsm в COM порт не имеет точек XON/XOFF.
Прикрепил ссылку с исходником и описанием загрузчика https://drive.google.com/folderview?id=0B5M0qoM4Gjk0LTlkWXFSZFJUTTg&usp=sharing
В общем очень нужен доработанный компонент COM порт с точками XON/XOFF, помогите плиз.
------------ Дoбавленo в 23.40:
Обновил исходник, дорисовал что смог.
Этот топик читают: Гость
Ответов: 43
Рейтинг: 1
|
|||
карма: 0 |
|
Разработчик
Ответов: 26170
Рейтинг: 2127
|
|||
А вот это не пойдет -- http://forum.d2h.ru/forum.html?q=3&p=42615#p42615
|
|||
карма: 22 |
|
Ответов: 43
Рейтинг: 1
|
|||
По описанию вроди то, спасибо! А как его установить, делал как в справке (перетягивал файлики на иконку) не получается и конвертер hic-his скачать тоже не могу чтоб старую версию чуть что попробовать. Как быть?
|
|||
карма: 0 |
|
Разработчик
Ответов: 26170
Рейтинг: 2127
|
|||
mcmega писал(а): Как быть?Кинуть *.ini файл на поле HiAsm-а, выбрать пакет Delphi и вкладку Misc (Разное) |
|||
карма: 22 |
|
Ответов: 43
Рейтинг: 1
|
|||
Да, всё получилось, СПОСИБО!
------------ Дoбавленo в 02.24: Посмотрел я компонент, это не то. Там сигналы XON/XOFF выставляются как метод и предназначены для симуляци. А мне нужны реальные сигналы о занятости линии и продолжении передачи, потому что, эти сигналы будут управлять той частью схемы, которая занимается формированием передающих команд и сигналов, т.е. если нужно подождать - передача останавливается, как только пришла команда на продолжение - пошла передача дальше. Эти задержки необходимы, чтоб записать прошивку в ячейки памяти в микроконтроллере, а на это нужно время. |
|||
карма: 0 |
|
Разработчик
Ответов: 26170
Рейтинг: 2127
|
|||
mcmega писал(а): А мне нужны реальные сигналыЭти сигналы, надо отрабатывать вручную, на то он и программный протокол. Программное управление потоком (XON/XOFF, Software Flow Control) предполагает наличие двунаправленного канала передачи данных. Работает протокол следующим образом: если устройство, принимающее данные, обнаруживает причины, по которым оно не может их дальше принимать, оно по обратному последовательному каналу посылает байт-символ XOFF (13h). Противоположное устройство (передатчик), приняв этот символ, приостанавливает передачу. Когда принимающее устройство снова становится готово к приему данных, оно посылает символ XON (11h), приняв который передатчик возобновляет передачу. Время реакции передатчика на изменение состояния приемника, по сравнению с аппаратным протоколом, увеличивается, по крайней мере, на время передачи символа (XON или XOFF). Следовательно, данные без потерь могут приниматься только приемником, имеющим дополнительный буфер принимаемых данных и сигнализирующим о неготовности заблаговременно. Преимущество программного протокола заключается в отсутствии необходимости передачи управляющих сигналов (уменьшение количества проводов в кабеле). Недостатком, кроме требования наличия буфера и большого времени реакции, является сложность реализации полудуплексного режима обмена. В конце ясно же написано, что не имеется управляющих сигналов, значит система не имеет на них никакой реакции, реакция будет только на прием символа, а не сигнала. |
|||
карма: 22 |
|
Ответов: 43
Рейтинг: 1
|
|||
Я так и понял, я думал, что в самом элементе есть та часть, которая выдаёт событие при приходе символов 13h и 11h. У меня и организован обычный UART с 3 проводами (земля, Rx, Tx).
Проблема такая, что непонятно как работает, пару ячеек записывает, потом нет, в терминале в ответ вообще непонятно что. Общий принцип работы должен быть такой: 1. Отправляем символ "U" и потом сбрасываем контроллер. Когда контроллер зайдёт в загрузчик, по UART выдаёт ответ - Chip45(и далее версия загрузчика). Это означает, что мы подключились к контроллеру через загрузчик. 2. Далее я должен подать символы "pf" и дождаться ответа "pf+". Это означает, что включен режим записи во Flash память. 3. Затем отправляются данные hex файла (причём в терминале они выглядят точно так же как и в файле). В процессе передачи контроллер отчитывается о каждой записи, выдавая по UART. 4. После прошивки подаём символ "g" и когда контроллер ответит g+ это означает, что мы отключились от загрузчика и пошла выполняться записанная программа. Во время всех этих действие (во время записи во Flash) работает XON/XOFF. Я кое что уже написал и готов испытывать в железе. Гляньте пожалуйста по ссылке в 1-ом посте. Обновил исходник, там же есть мануал по загрузчику и пример hex файла. |
|||
карма: 0 |
|
Разработчик
Ответов: 26170
Рейтинг: 2127
|
|||
mcmega писал(а): Я кое что уже написал и готов испытывать в железе. Гляньте пожалуйста по ссылке в 1-ом постеНо у меня нет железа, поэтому, все это бесполезно, как я могу это проверить Да и вообще, я никогда не юзал протокол xon/xoff, только асинхронный режим -- отдал данные и забыл. |
|||
карма: 22 |
|
Ответов: 8930
Рейтинг: 823
|
|||
mcmega писал(а): ..контроллер отчитывается о каждой записи, выдавая по UART.. |
|||
карма: 19 |
|
Разработчик
Ответов: 26170
Рейтинг: 2127
|
|||
Леонид писал(а): а если запись не получилась, то символ "13h"Скорее, не не получилась, а не успевает, переполняется буфер, вот он и шлет сигнал XOFF, типа -- тормозни, я обработаю, что есть, а после освобождения буфера шлет XON -- можешь продолжать слать ------------ Дoбавленo в 14.56: Я внимательно посмотрел компонент ComAsync и нашел вот это. Видимо, ТС с ним не до конца разобрался XonXoffIn=Использовать управление потоком СТАРТ-СИГНАЛА / СТОП-СИГНАЛА в течение приема данных портом. При True порт передает символ XoffChar, когда в приемном буфер переполнен, и XonChar, когда в приемном буфере остается менее XonLim символов|14|1|True,False XonXoffOut=Использовать управление потоком СТАРТ-СИГНАЛА / СТОП-СИГНАЛА в течение передачи данных портом. Если это поле равно TRUE, то передача останавливается при приеме символа XoffChar, и возобновляется при приеме символа XonChar|14|1|True,False Все это должно работать автоматически, на уровне контроллера UART. Если надо ограничить передачу от программы к контроллеру, то использовать надо XonXoffOut=True. Программе должно быть сугубо деревянно на протокол обмена, все должно работать на аппаратном уровне через буфер UART. Программа просто должна писать в это буфер и не заморачиваться, все должен будет разрулить контроллер UART |
|||
карма: 22 |
|
Ответов: 43
Рейтинг: 1
|
|||
После успешной записи UART контроллера выдаёт "." Все символы, которые выводит загрузчик о статусе своей работы описаны в мануале из первого поста, там же и обновлённые наработки в этом вопросе.
Элемент асинхронный COM порт со второго поста я не использую, потому что я его подключил точно так же как и асинхронный Com порт из "альтернативной сборки" и он не заработал. Порт не захотел открываться. Я думаю нужно попробовать организовать не построчный, а посимвольный вывод байт в порт UART, мне кажется, что отправляя строку, контроллер где то в середине отправляет XOFF и в итоге строка не передаётся полностью. А как это сделать, я не знаю. Дайте пример пожалуйста или исправьте прямо на моём исходнике. |
|||
карма: 0 |
|
Разработчик
Ответов: 26170
Рейтинг: 2127
|
|||
mcmega писал(а): контроллер где то в середине отправляет XOFF и в итоге строка не передаётся полностьюПрочитай внимательно мой предыдущий пост. Только компонентом ComAsync можно будет рабоать на аппаратном уровне, штатные компоненты могут работать некорректно с протоколом XON/XOFF. mcmega писал(а): А как это сделать, я не знаюНасколько я понял, то у нас никто не юзал порты в режиме XON/XOFF, тч вряд ли кто поможет конкретно. Или еще подождать надо, может кто и пробовал, но еще не засветился на сайте |
|||
карма: 22 |
|
Ответов: 43
Рейтинг: 1
|
|||
Спасибо nesco и Леонид. Последние новости с испытаний. В свою прогу, я добавил поле ввода и вручную загонял данные. Попробовал пройти весь цикл записи прошивки и, что Вы думаете, всё прошло успешно. Записывать нужно построчно и самое важно (в мануале написано о возврате каретки) в конце каждой строки я добавлял 10 (типа нажатие enter). В итоге всё заработало. Сейчас буду пробовать сделать всю передачу как должно быть, пачкой.
------------ Дoбавленo в 18.11: Наконец то, Flash записывается, вожусь с EEPROM. |
|||
карма: 0 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
mcmega писал(а): 10 (типа нажатие enter) |
|||
карма: 25 |
|
Ответов: 43
Рейтинг: 1
|
|||
Ну да, chr(10) - переход на новую строку, chr(13) - возврат каретки.
Скажите, в мануале по загрузчику написано, что нужно использовать режим CR+LF. Это и есть, что в конце строки нужно перейти на следующую и сделать возврат каретки. А как ввести правильно 10 и 13 в строку (нужно чтоб и то и то было)? Сейчас сделано на элементе Формат и записано %110 |
|||
карма: 0 |
|