|
|
  |
STM32F1xx, UART на 10МБит - осуществимо? |
|
|
|
Oct 24 2012, 13:24
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(scifi @ Oct 24 2012, 16:26)  К сожалению, шину, на которой сидит UART, нельзя разгонять выше 60 МГц. То есть, максимум 7.5 МБит? Это хуже чем 15, но лучше, чем 2.25  Цитата(scifi @ Oct 24 2012, 16:35)  Интересная интерпретация, но формула BRR = Fbus / BaudRate говорит о том, что регистр всё-таки задаёт частоту битов UART. Поэтому какая-та заморочка с тактированием там должна быть, чтобы получить дробные частоты. Сигма-дельта или что-то такое. Скорее, там где-то есть неявное предварительное умножение F_BUS на 16. Дробные - сильно сомневаюсь. (Нечто похожее на дробные скорости встречал только у MSP430, и то, там это надо было задавать руками в виде битовой маски добавочных тактов по битам.)
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Oct 24 2012, 18:27
|
Частый гость
 
Группа: Свой
Сообщений: 197
Регистрация: 15-10-10
Из: г. Москва
Пользователь №: 60 179

|
Цитата Дробные - сильно сомневаюсь. (Нечто похожее на дробные скорости встречал только у MSP430, и то, там это надо было задавать руками в виде битовой маски добавочных тактов по битам.) По крайней мере SAM7 семейство от Атмел имеет для асинхронного режима дробный делитель.
|
|
|
|
|
Oct 24 2012, 19:30
|
Гуру
     
Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954

|
Цитата(AHTOXA @ Oct 24 2012, 20:24)  То есть, максимум 7.5 МБит? Это хуже чем 15, но лучше, чем 2.25  Скорее, там где-то есть неявное предварительное умножение F_BUS на 16. Дробные - сильно сомневаюсь. (Нечто похожее на дробные скорости встречал только у MSP430, и то, там это надо было задавать руками в виде битовой маски добавочных тактов по битам.) максимум 4.5 на 72МГц. нет там умножения, просто при делении на 16 разрешили выбирать скорость не как обычно после деления на 16: F/16/N, а просто как F/N, при N>16. что позволяет более гибкую настройку частоты.
если надо только передавать, а с другой стороны принимать будет кто-нибудь с УАРТом по-быстрее, то можно передатчик от SPI задействовать, только буфер нужен будет в два раза больше под 16ти разрядные данные и руками надо будет по нему пробежаться и стартовые биты в каждый байт добавить. из него тогда и 72/2/2 = 18МБит вроде выжать можно.
|
|
|
|
|
Oct 24 2012, 20:06
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(_pv @ Oct 25 2012, 01:30)  максимум 4.5 на 72МГц. Это мы уже про F2xx. Цитата(_pv @ Oct 25 2012, 01:30)  нет там умножения, просто при делении на 16 разрешили выбирать скорость не как обычно после деления на 16: F/16/N, а просто как F/N, при N>16. что позволяет более гибкую настройку частоты. Ну как же нет? При делении F_BUS на BRR мы получаем BAUDRATE (время одного бита). Откуда тогда берётся частота семплирования 16 раз на бит? Цитата(_pv @ Oct 25 2012, 01:30)  если надо только передавать Нет, к сожалению, принимать тоже нужно.
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Oct 24 2012, 20:35
|
Гуру
     
Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954

|
Цитата(AHTOXA @ Oct 25 2012, 02:06)  Ну как же нет? При делении F_BUS на BRR мы получаем BAUDRATE (время одного бита). Откуда тогда берётся частота семплирования 16 раз на бит? ну меньше чем на 16 всё равно делить нельзя. просто пользователю дали не поделенную как обычно на 16 частоту, которую дальше можно только поделить на 2,3, ... то есть baudrate будет F/16, F/32, F/48, а позволили просто делить и на 17, 18, 19... тоже. при этом бит всё равно где-то примерно посередине сэмплируется, ну теперь не ровно по середине, а в 8/17 например, не велика разница, зато частота гораздо гибче настраивается. Цитата(AHTOXA @ Oct 25 2012, 02:06)  Нет, к сожалению, принимать тоже нужно. тогда максимум 4.5Мбит.
|
|
|
|
|
Oct 24 2012, 21:12
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(_pv @ Oct 25 2012, 02:35)  ну меньше чем на 16 всё равно делить нельзя. Ну да, вы всё очень хорошо расписали. В BRR оставили запас в 16, для того, чтобы можно было его поделить на 16 (и тем самым умножить частоту семплирования на 16 - это как раз то, о чём я и говорю  ). Цитата(_pv @ Oct 25 2012, 02:35)  тогда максимум 4.5Мбит. Или 7.5 у F2xx, или 10.5 у F4xx.
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Oct 25 2012, 04:50
|

Универсальный солдатик
     
Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362

|
Цитата(AHTOXA @ Oct 25 2012, 01:07)  Мне надо быстро сливать большой объём данных с одного устройства на другое, кабель - метра три, жил - желательно поменьше. Вокруг будут помехи, так что USB не катит. Какие ещё у меня варианты, кроме быстрого RS-485? Но сейчас вы экспериментируете без помех? А если не получили подтверждения о правильном приеме, передаете еще раз? Или как еще можно объяснить замедление передачи на высоких скоростях? Что, если на время пересылки не разрешать процессору бегать по программе (обращаться к Flash программы), а оставить в цикле, проверяющем окончание передачи? Все команды будут читаться из буфера, нагрузка на шины меньше. Там, где обсуждалось про F/N, я предлагал рассчитывать скорости с округлением результата. Не просто F/N, а (F + N/2)/N. Может, вы уже подобрались к скоростям, когда дробную часть от деления просто отбрасывать нельзя?
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|