Вверх ↑
Этот топик читают: Гость
Ответов: 43
Рейтинг: 1
#1: 2014-02-04 23:40:51 ЛС | профиль | цитата
Здравствуйте!
Я хочу написать программу для загрузки прошивки в формате 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:
Обновил исходник, дорисовал что смог.
карма: 0

0
Разработчик
Ответов: 26170
Рейтинг: 2127
#2: 2014-02-05 01:04:52 ЛС | профиль | цитата
А вот это не пойдет -- http://forum.d2h.ru/forum.html?q=3&p=42615#p42615
карма: 22

0
Ответов: 43
Рейтинг: 1
#3: 2014-02-05 01:28:52 ЛС | профиль | цитата
По описанию вроди то, спасибо! А как его установить, делал как в справке (перетягивал файлики на иконку) не получается и конвертер hic-his скачать тоже не могу чтоб старую версию чуть что попробовать. Как быть?
карма: 0

0
Разработчик
Ответов: 26170
Рейтинг: 2127
#4: 2014-02-05 01:45:52 ЛС | профиль | цитата
mcmega писал(а):
Как быть?

Кинуть *.ini файл на поле HiAsm-а, выбрать пакет Delphi и вкладку Misc (Разное)
карма: 22

0
Ответов: 43
Рейтинг: 1
#5: 2014-02-05 02:24:25 ЛС | профиль | цитата
Да, всё получилось, СПОСИБО!
------------ Дoбавленo в 02.24:
Посмотрел я компонент, это не то. Там сигналы XON/XOFF выставляются как метод и предназначены для симуляци. А мне нужны реальные сигналы о занятости линии и продолжении передачи, потому что, эти сигналы будут управлять той частью схемы, которая занимается формированием передающих команд и сигналов, т.е. если нужно подождать - передача останавливается, как только пришла команда на продолжение - пошла передача дальше. Эти задержки необходимы, чтоб записать прошивку в ячейки памяти в микроконтроллере, а на это нужно время.
карма: 0

0
Разработчик
Ответов: 26170
Рейтинг: 2127
#6: 2014-02-05 02:52:25 ЛС | профиль | цитата
mcmega писал(а):
А мне нужны реальные сигналы

Эти сигналы, надо отрабатывать вручную, на то он и программный протокол.

Программное управление потоком (XON/XOFF, Software Flow Control) предполагает наличие двунаправленного канала передачи данных. Работает протокол следующим образом: если устройство, принимающее данные, обнаруживает причины, по которым оно не может их дальше принимать, оно по обратному последовательному каналу посылает байт-символ XOFF (13h). Противоположное устройство (передатчик), приняв этот символ, приостанавливает передачу. Когда принимающее устройство снова становится готово к приему данных, оно посылает символ XON (11h), приняв который передатчик возобновляет передачу. Время реакции передатчика на изменение состояния приемника, по сравнению с аппаратным протоколом, увеличивается, по крайней мере, на время передачи символа (XON или XOFF). Следовательно, данные без потерь могут приниматься только приемником, имеющим дополнительный буфер принимаемых данных и сигнализирующим о неготовности заблаговременно.
Преимущество программного протокола заключается в отсутствии необходимости передачи управляющих сигналов (уменьшение количества проводов в кабеле). Недостатком, кроме требования наличия буфера и большого времени реакции, является сложность реализации полудуплексного режима обмена.


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

0
Ответов: 43
Рейтинг: 1
#7: 2014-02-05 10:18:52 ЛС | профиль | цитата
Я так и понял, я думал, что в самом элементе есть та часть, которая выдаёт событие при приходе символов 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

0
Разработчик
Ответов: 26170
Рейтинг: 2127
#8: 2014-02-05 13:15:07 ЛС | профиль | цитата
mcmega писал(а):
Я кое что уже написал и готов испытывать в железе. Гляньте пожалуйста по ссылке в 1-ом посте

Но у меня нет железа, поэтому, все это бесполезно, как я могу это проверить Да и вообще, я никогда не юзал протокол xon/xoff, только асинхронный режим -- отдал данные и забыл.

карма: 22

0
Ответов: 8930
Рейтинг: 823
#9: 2014-02-05 14:27:34 ЛС | профиль | цитата
mcmega писал(а):
..контроллер отчитывается о каждой записи, выдавая по UART..
Следует-ли эту фразу понимать так: при удачной записи очередного символа, контроллер выдаёт что-то (что именно?) "Запись проведена успешно!", а если запись не получилась, то символ "13h"?
карма: 19

0
Разработчик
Ответов: 26170
Рейтинг: 2127
#10: 2014-02-05 14:56:45 ЛС | профиль | цитата
Леонид писал(а):
а если запись не получилась, то символ "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

0
Ответов: 43
Рейтинг: 1
#11: 2014-02-05 16:30:02 ЛС | профиль | цитата
После успешной записи UART контроллера выдаёт "." Все символы, которые выводит загрузчик о статусе своей работы описаны в мануале из первого поста, там же и обновлённые наработки в этом вопросе.
Элемент асинхронный COM порт со второго поста я не использую, потому что я его подключил точно так же как и асинхронный Com порт из "альтернативной сборки" и он не заработал. Порт не захотел открываться.
Я думаю нужно попробовать организовать не построчный, а посимвольный вывод байт в порт UART, мне кажется, что отправляя строку, контроллер где то в середине отправляет XOFF и в итоге строка не передаётся полностью. А как это сделать, я не знаю. Дайте пример пожалуйста или исправьте прямо на моём исходнике.

карма: 0

0
Разработчик
Ответов: 26170
Рейтинг: 2127
#12: 2014-02-05 16:36:02 ЛС | профиль | цитата
mcmega писал(а):
контроллер где то в середине отправляет XOFF и в итоге строка не передаётся полностью

Прочитай внимательно мой предыдущий пост. Только компонентом ComAsync можно будет рабоать на аппаратном уровне, штатные компоненты могут работать некорректно с протоколом XON/XOFF.
mcmega писал(а):
А как это сделать, я не знаю

Насколько я понял, то у нас никто не юзал порты в режиме XON/XOFF, тч вряд ли кто поможет конкретно. Или еще подождать надо, может кто и пробовал, но еще не засветился на сайте
карма: 22

0
Ответов: 43
Рейтинг: 1
#13: 2014-02-05 18:11:03 ЛС | профиль | цитата
Спасибо nesco и Леонид. Последние новости с испытаний. В свою прогу, я добавил поле ввода и вручную загонял данные. Попробовал пройти весь цикл записи прошивки и, что Вы думаете, всё прошло успешно. Записывать нужно построчно и самое важно (в мануале написано о возврате каретки) в конце каждой строки я добавлял 10 (типа нажатие enter). В итоге всё заработало. Сейчас буду пробовать сделать всю передачу как должно быть, пачкой.
------------ Дoбавленo в 18.11:
Наконец то, Flash записывается, вожусь с EEPROM.
карма: 0

0
Ответов: 16884
Рейтинг: 1239
#14: 2014-02-05 19:11:26 ЛС | профиль | цитата
mcmega писал(а):
10 (типа нажатие enter)
"типа нажатие Enter" - 13
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 43
Рейтинг: 1
#15: 2014-02-05 21:48:41 ЛС | профиль | цитата
Ну да, chr(10) - переход на новую строку, chr(13) - возврат каретки.
Скажите, в мануале по загрузчику написано, что нужно использовать режим CR+LF. Это и есть, что в конце строки нужно перейти на следующую и сделать возврат каретки. А как ввести правильно 10 и 13 в строку (нужно чтоб и то и то было)? Сейчас сделано на элементе Формат и записано %110
карма: 0

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)