Я собираюсь использовать кварц 8 МГц для запуска моего микроконтроллера со скоростью 16 MIPS (PLL 4x, 2 цикла инструкций). Однако, насколько я знаю, 8 МГц не делится ни на какие частоты UART ... так насколько критичны эти частоты? Я планирую использовать 115 200 бод.
Может ли UART работать в пределах ±1%? Если это не сработает, какую частоту использовать? (Мне хотелось бы максимально приблизиться к 16 MIPS для максимальной скорости обработки.) Если это имеет значение, я использую PIC24FJ64GA004.
Если вы находитесь в пределах 1%, вы должны быть в порядке.
Предположим, ваш UART использует тактовую частоту с 16-кратной передискретизацией, например, вы можете установить ее на 1 843 200 Гц до 16-кратной передискретизации 115 200 бит/с. (подобная передискретизация довольно распространена). Это позволяет UART отсчитывать 8 разгонов от заднего фронта начального бита, поэтому он может найти центр битовых ячеек с точностью +/- один период разгона после который он отсчитывает 16 периодов разгона, чтобы определить, когда производить выборку данных.
Если вы предполагаете, что он может попасть в центр начального бита, то для того, чтобы сохранить выборку последовательных данных в правильных битовых ячейках через 8 битов данных, тактовая частота должна оставаться между (8-0,5)/8 и (8+0,5). )/8, или +/-6,25% от предполагаемой скорости передачи данных. Более высокий разгон приближает к идеальному условию попадания в центр стартового бита, но 8x или 16x обычно достаточно близко, чтобы вы могли предположить, что 5%-ное несоответствие будет работать.
Тем не менее, вы не можете рассчитывать на то, что другая сторона будет идеально на частоте. Если вы подключите устройство, которое на 4% быстрее, к устройству, которое на 4% медленнее, у вас возникнут проблемы. Я столкнулся, по крайней мере, с одним случаем, когда ПК работал немного медленно, а устройство — немного быстрее, и они могли лишь незначительно обмениваться данными, хотя одно и то же устройство нормально работало с другими ПК, а ПК — с другими. устройства. (Ограничил их примерно 112 кбит/с и 119 кбит/с). По этой причине хорошо попытаться максимально приблизиться к номинальной частоте. Я никогда не видел, чтобы что-то в пределах 2% от номинального имело проблемы.
Обычно используется основная тактовая частота, которая обеспечивает целое число, кратное предполагаемой частоте передискретизации UART, умноженной на скорость передачи данных. Например, если вы хотите, чтобы ЦП работал на частоте около 8 МГц, вы можете использовать осциллятор 7,3728 МГц, который можно разделить на 4, чтобы получить 1,8432 МГц, что равно 16 умножить на 115200.
1% упоминаний @JustJeff не требуется. Большинство UART допускают полубитовую ошибку в последнем бите. Большую часть времени кадр состоит из 1 стартового бита, 8 битов данных и 1 стопового бита, всего 10 бит. Половина бита на 10 бит составляет 5% (6,25% JustJeff не учитывает стартовый и стоповый биты).
Один еще не упомянутый момент заключается в том, что некоторые устройства ожидают передачи байта данных для каждого байта данных, которые они получают. Если на такое устройство непрерывно подаются данные, его скорость передачи даже на 0,1 % медленнее, чем у передающего устройства, и оно не имеет возможности отправлять слегка сжатые стоповые биты, его вывод будет отставать на байт на каждые 1000 последовательных битов. байтов, которые приходят. Если устройство ограничено 16 байтами буферизации, оно будет отбрасывать байт данных после прохождения примерно 16 000, а затем будет отбрасывать примерно один байт на тысячу. Стоит отметить, что так называемые «1200-бодовые» модемы на самом деле работают со скоростью чуть выше 1200 бит/сек (думаю, около 1202) именно по этой причине (так что даже если передатчик на 0,15% быстрее, чем должен). быть, модем все равно пропустит все данные).
JustJeff забыл о стартовом бите, но Стивен добавил стоповый. Предполагая общий протокол с 8 битами данных, 1 стартовым битом и без бита четности (количество стоповых битов не имеет значения), существует 8 1/2 битовых времен от переднего фронта начального бита до центра последний бит данных. Как правило, вы хотите, чтобы приемник сэмплировал этот последний бит в течение 1/4 бита. Обратите внимание, что 1/2 бита — это гарантированный порог отказа. Все, что находится рядом с ним, становится ненадежным, поскольку всегда присутствует электрический шум и дрожание.
1/4 разделить на 8 1/2 = 2,94%.
Как упомянул ДжастДжефф, большинство реализаций UART на самом деле производят выборку входящих данных с асинхронной тактовой частотой 16x. Это добавляет еще одну временную погрешность в 1/16 бита, поскольку это ошибка, с которой можно измерить передний фронт начального бита. Время 1/16 бита из 8 1/2 бита составляет еще 0,74%. Это следует из бюджета ошибок, рассчитанного ранее. В итоге вы получите 2,2% допустимого рассогласования часов для приемника, чтобы сэмплировать последний бит в пределах 1/4 бита времени от его центра.
Как уже говорили другие, использование кристалла 7,3728 МГц является обычной практикой, когда требуется точная скорость передачи данных. Обычно вы можете организовать работу процессора на максимальной скорости, при этом скорость передачи данных UART не превышает ошибку кристалла.
Томас О
Томас О
Томас О
ДжастДжефф