Миландр

Ключевым подразделением нашей компании является Центр Проектирования интегральных микросхем
Текущее время: 2017-дек-15 11:10

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




Начать новую тему Ответить на тему  [ Сообщений: 19 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: UART изменение скорости
СообщениеДобавлено: 2017-сен-14 12:10 
Не в сети

Зарегистрирован: 2015-фев-25 09:17
Сообщения: 12
Столкнулся я с очередной проблемой. Суть в следующем. Имеется загрузчик (для обновления прошивки) и рабочее ПО. Они используют UART, но на разных скоростях. Так вот, при переходе из загрузчика в рабочее ПО блок переконфигурируется (сначала deinit, потом init из библиотеки с гитхаба) на новую скорость. Вероятно где-то в этот момент идут помехти/просадки по питанию, т.к. регистры фактичеси меняют значения, а сама скорость - нет. Обменов в канале нет (т.е. должно работать из даташита "П р и м е ч а н и е – Изменение содержимого регистров IBRD и FBRD вступают в силу только после завершения передачи и приема текущего символа данных"). Есть примечание по поводу изменение CR, но оно несколько непонятно.

Может кто сталкивался? Что думают разработчики?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: UART изменение скорости
СообщениеДобавлено: 2017-сен-14 12:26 
Не в сети

Зарегистрирован: 2009-сен-21 12:39
Сообщения: 449
При тактировании ВЕ93 от HSI "на лету" (по захвату таймером длительности битов старт-байта пакета) пересчитываем значение делителя UART (с последующим подключением UART). Работает, проводились тепловые испытания в диапазоне -50...50. При отладке принудительно менялась частота HSI.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: UART изменение скорости
СообщениеДобавлено: 2017-сен-14 13:17 
Не в сети

Зарегистрирован: 2015-фев-25 09:17
Сообщения: 12
Нет, тактируется все внешним кварцем, к самой точности установки скорости UART вопросов нет. Проблема с переключением на другую битовую скорость.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: UART изменение скорости
СообщениеДобавлено: 2017-сен-14 13:23 
Не в сети

Зарегистрирован: 2009-сен-21 12:39
Сообщения: 449
Ну так при подстройке и переключается битовая скорость.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: UART изменение скорости
СообщениеДобавлено: 2017-сен-14 15:40 
Не в сети

Зарегистрирован: 2017-фев-14 11:21
Сообщения: 48
Joker2k писал(а):
Столкнулся я с очередной проблемой. Суть в следующем. Имеется загрузчик (для обновления прошивки) и рабочее ПО. Они используют UART, но на разных скоростях. Так вот, при переходе из загрузчика в рабочее ПО блок переконфигурируется (сначала deinit, потом init из библиотеки с гитхаба) на новую скорость. Вероятно где-то в этот момент идут помехти/просадки по питанию, т.к. регистры фактичеси меняют значения, а сама скорость - нет. Обменов в канале нет (т.е. должно работать из даташита "П р и м е ч а н и е – Изменение содержимого регистров IBRD и FBRD вступают в силу только после завершения передачи и приема текущего символа данных"). Есть примечание по поводу изменение CR, но оно несколько непонятно.

Может кто сталкивался? Что думают разработчики?


Joker2K,
Ваш запрос зарегистрирован под номером U7091402 от 14.09.2017.
Наши специалисты займутся Вашей проблемой в ближайшее время. Максимальный срок подготовки ответа - 5 рабочих дней.
С наилучшими пожеланиями,
Отдел технической поддержки ЦП ИС АО «ПКК Миландр»

_________________
Отдел технической поддержки support@milandr.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: UART изменение скорости
СообщениеДобавлено: 2017-сен-14 17:10 
Не в сети

Зарегистрирован: 2009-июл-21 14:13
Сообщения: 1037
Откуда: Тула
Ekaterina писал(а):
Joker2K,
Ваш запрос зарегистрирован под номером U7091402 от 14.09.2017.
Наши специалисты займутся Вашей проблемой в ближайшее время. Максимальный срок подготовки ответа - 5 рабочих дней.
С наилучшими пожеланиями,
Отдел технической поддержки ЦП ИС АО «ПКК Миландр»

Вау! Это поистине крутой ответ.
Жаль только крутизна вопроса не соответствует. Надо бы было приложить пример программы и осциллограммы. Пруфы. А то гадать специалистам на кофейной гуще...
По моему опыту - такой проблемы не было.

_________________
сочувствующий…


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: UART изменение скорости
СообщениеДобавлено: 2017-сен-15 07:57 
Не в сети

Зарегистрирован: 2015-фев-25 09:17
Сообщения: 12
Собственно, какой тут может быть код? Уарт работает, далее вызываем deinit, затем init (с новой битовой скоростью) из библиотеки, ссылка на которую на этом форуме. Но скорость новая не устанавливается, все отлично работает, но на старой. Регитстры значения меняют. И какие в таком случае можно осциллограммы показать?

Для меня конкретно проблема понятна, дело в способе переинициализации в условиях помех на линии. В даташите много разных примечаний по этому поводу. Но они несколько непонятны. Логично сразу посмотреть на IBRD,FBRD,LCR_H. Там написано "П р и м е ч а н и е – Изменение содержимого регистров IBRD и FBRD вступают в силу только после завершения передачи и приема текущего символа данных." Так вот этого не хватает, даже когда гарантированно на линии уже ничего нет, надо полностью отключать UART.

Смотрим далее, на счет CR:
П р и м е ч а н и е – Рекомендуется следующая последовательность действий для программирования регистров управления:
Остановите работу приемопередатчика. <- Это только бит UARTEN, или также RXE с TXE (по описанию битов подходит ко всему)
Дождаться окончания приема и/или передачи текущего символа данных. <- Для передачи есть статусный бит BUSY, а для приема какой? а если ловим шум?
Сбросьте буфер передатчика путем установки бита FEN регистра LCR_H в 0.
Изменить настройки регистра CR.
Возобновите работу приемопередатчика.

Короче, я сделал установку CR в 0, простую задержку на длительность символа, далее деинициализация и новая инициализация. Пока проблем не наблюдал.
Следовательно, вопрос простой - а как правильно то делать? Как определить отсутствие приема?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: UART изменение скорости
СообщениеДобавлено: 2017-сен-15 08:25 
Не в сети

Зарегистрирован: 2009-июл-21 14:13
Сообщения: 1037
Откуда: Тула
Осциллографом можно показать "помехи на линии" хотя бы, а так дополнительно можно вывести на порты статусные и "ошибочные" биты приёмопередатчика. Это для того, чтобы посмотреть как помехи воспринимаются приёмомпередатчиком.

Ещё полезно было бы показать код всего того дела. Желательно в формате минимального проекта (для кейл) и основное место на форуме процитировать.

_________________
сочувствующий…


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: UART изменение скорости
СообщениеДобавлено: 2017-сен-15 11:17 
Не в сети

Зарегистрирован: 2017-апр-26 14:51
Сообщения: 49
Откуда: ПКК "Миландр"
Цитата:
Столкнулся я с очередной проблемой. Суть в следующем. Имеется загрузчик (для обновления прошивки) и рабочее ПО. Они используют UART, но на разных скоростях. Так вот, при переходе из загрузчика в рабочее ПО блок переконфигурируется (сначала deinit, потом init из библиотеки с гитхаба) на новую скорость. Вероятно где-то в этот момент идут помехти/просадки по питанию, т.к. регистры фактичеси меняют значения, а сама скорость - нет. Обменов в канале нет (т.е. должно работать из даташита "П р и м е ч а н и е – Изменение содержимого регистров IBRD и FBRD вступают в силу только после завершения передачи и приема текущего символа данных"). Есть примечание по поводу изменение CR, но оно несколько непонятно.


Используйте следующий код, он переключает скорость успешно.

Код:
void UartSetBaud(uint32_t baudRate, uint32_t freqCPU)
{
  uint32_t divider = freqCPU / (baudRate >> 2);
  uint32_t CR_tmp = UART_X->CR;
  uint32_t LCR_tmp = UART_X->LCR_H;

  while ( (UART_X->FR & UART_FLAG_BUSY) ); // wait Busy
   
  UART_X->CR = 0;
  UART_X->IBRD = divider >> 6;
  UART_X->FBRD = divider & 0x003F;
  UART_X->LCR_H = LCR_tmp;
  UART_X->CR = CR_tmp;
}


Делители действительно вступают в силу при окончании передачи текущего символа. Но есть некоторая проблема - при последовательности действий
DR = Value;
UartSetBaud(NewRate);
могут возникать случаи, когда новый символ не успевает дойти до выходной цепи до смены скорости. Соответственно схема видит, что в выходной части символ не передается и меняет скорость. Далее сериализованный новый символ наконец то пришел на отправку, а скорость уже новая. Именно данное поведение наблюдается при смене скорости в начальном загрузчике по UART, о котором так много обсуждалось на форуме. Ответ от бутлоадера о смене скорости приходит то на новой, то на старой скорости.

Для того чтобы исключить данное поведение, в функции смены скорости стоит обработка бита BUSY.

_________________
Отдел технической поддержки support@milandr.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: UART изменение скорости
СообщениеДобавлено: 2017-сен-15 11:42 
Не в сети

Зарегистрирован: 2015-фев-25 09:17
Сообщения: 12
Как я уже писал, нечто похожее сейчас я уже реализовал. Только там не ожидание сброса бита BUSY, а просто задержка. Связано это с тем, что, судя по описанию, BUSY отвечает только за передачу символа. В моем случае никакой передачи и так нет. Но зато вероятно наличие успешного или ошибочного приема. Так вот, как определить ведется ли прием в настоящий момент и как определить завершение успешного/ошибочного приема?

Upd: В приведенном выше посте обработка все равно не в соответствии с документацией, а именно пункты "Остановите работу приемопередатчика. Дождаться окончания приема и/или передачи текущего символа данных" (ожидание производится ДО установки CR=0)

По просьбам трудящихся публикую код с изменениями, на котором проблема не проявляется

Код:
// это я добавил:
MDR_UART1->CR = 0;
wait(<время символа на сторой скорости>);
// в начале было только это:
UART_DeInit(...);
UART_Init(...);


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: UART изменение скорости
СообщениеДобавлено: 2017-сен-15 12:37 
Не в сети

Зарегистрирован: 2017-апр-26 14:51
Сообщения: 49
Откуда: ПКК "Миландр"
Цитата:
Но зато вероятно наличие успешного или ошибочного приема. Так вот, как определить ведется ли прием в настоящий момент и как определить завершение успешного/ошибочного приема?

Если Вы не можете побороть шумы на линии, то необходимо использовать какой-то иной, более защищенный от помех интерфейс связи. Возможно с дифференциальными линиями.
Так же можете попробовать побороться с наводками программно, например, разработать свой протокол связи с CRC, с подтверждениями, с синхронизирующими посылками, и т.д.

Если на входных линиях болтанка, то никаким образом микросхема не поймет полезный это сигнал или помеха.

_________________
Отдел технической поддержки support@milandr.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: UART изменение скорости
СообщениеДобавлено: 2017-сен-15 12:59 
Не в сети

Зарегистрирован: 2015-фев-25 09:17
Сообщения: 12
Дело не в том, как определить полезный сигнал или нет. Дело в том, что машина состояний периферийного блока входит в ступор, когда пытаешься реконфигурировать и идет прием/передача. Так вот мой вопрос - как ПОСЛЕ отключения приемопередатчика правильно дождаться завершения полезного или нет приема. Для последующей попытки переконфигурации блока.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: UART изменение скорости
СообщениеДобавлено: 2017-сен-15 13:00 
Не в сети

Зарегистрирован: 2009-июл-21 14:13
Сообщения: 1037
Откуда: Тула
Vasiliy писал(а):
Если на входных линиях болтанка, то никаким образом микросхема не поймет полезный это сигнал или помеха.

Вопрос не в разумности микросхемы, а в факте или его отсутствии некорректного поведения м/с. Вопрос: игнорируется ли приёмопередатчиком обновлённое значение делителя и если да то по какой причине и на какое время?

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

_________________
сочувствующий…


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: UART изменение скорости
СообщениеДобавлено: 2017-сен-15 13:20 
Не в сети

Зарегистрирован: 2017-апр-26 14:51
Сообщения: 49
Откуда: ПКК "Миландр"
Цитата:
Так вот мой вопрос - как ПОСЛЕ отключения приемопередатчика правильно дождаться завершения полезного или нет приема. Для последующей попытки переконфигурации блока.

Этот вопрос должен решить передатчик который управляет сменой скорости. Грубо говоря, мастер послал команду сменить скорость и линию некоторое время не трогает, отрабатывает задержку или ждет ответа на новой скорости. Ведомый же, приняв команду будет уверен что линия не будет забиваться и меняет скорость, затем отвечает мастеру. (Мастер и ведомый здесь называются условно)

Цитата:
Вопрос: игнорируется ли приёмопередатчиком обновлённое значение делителя и если да то по какой причине и на какое время?

Обновленное значение делителя не игнорируется. Заканчивается передача текущего символа, а затем происходит фактическая смена скорости. Т.е. следующие посылки гарантировано уходят на новой скорости.

_________________
Отдел технической поддержки support@milandr.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: UART изменение скорости
СообщениеДобавлено: 2017-сен-15 13:45 
Не в сети

Зарегистрирован: 2015-фев-25 09:17
Сообщения: 12
Цитата:
Этот вопрос должен решить передатчик который управляет сменой скорости. Грубо говоря, мастер послал команду сменить скорость и линию некоторое время не трогает, отрабатывает задержку или ждет ответа на новой скорости. Ведомый же, приняв команду будет уверен что линия не будет забиваться и меняет скорость, затем отвечает мастеру. (Мастер и ведомый здесь называются условно)


Этот момент я описывал. Устройство действительно ведомое. НО в загрузчике и рабочем ПО скорости аурта разные. Таким образом переключение есть в любом случае, для этого ничего не надо посылать.

Цитата:
Обновленное значение делителя не игнорируется. Заканчивается передача текущего символа, а затем происходит фактическая смена скорости. Т.е. следующие посылки гарантировано уходят на новой скорости.


Вот именно этого я и не наблюдал, а чем тоже писал. Повторю. Я смотрю значения регистров делителя, там НОВОЕ значение. Смотрю на линию - там тишина. Далее мастером посылаю пакеты, но обмены происходят только на СТАРОЙ скорости.


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

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


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

Сейчас этот форум просматривают: Bing [Bot] и гости: 5


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

Найти:
Перейти:  
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB