# 18. USART
## Объяснение на руссоком
https://www.youtube.com/watch?v=EN0nUflF-FU
## Тоже объяснение
https://www.youtube.com/watch?v=dmLZTI9qZTw
> [name=Дарья Воронская] это uart, а не usart, но usart это частично uart, так что ролик все равно будет полезным
> [name=Дарья Воронская] Что есть контроль четности?. а нашёл. контроль чётности - это когда у тебя есть дополнительный бит, который равен тому, чета ли сумма бит данных. соответственно если данные дополнительного бита и чётности суммы битов данных не совпадают - есть ошибка.
## Конспект объяснения с какого-то ролика
Usart
Асинхронный способ:
3 контакта - передатчик, приёмник, gnd
Сначала на контакте данных сигнал = 1, посылка начинается с отправки стартового бита=0, дальше идут от 5 до 9 бит данных
Далее следует бит паритета, который позволяет определить однобитовую ошибку в данных (несет с собой информацию о том, четна или нечетна посылка)
Дальше идёт стоп бит, который всегда равен 1. Возможно наличие второго стопового бита (зачем?)
Зачастую частота контроллера бывает выше, чем нужно при передаче, поэтому частоту дополнительно делят на UBBR+1. Которая в последствии делится на 8 и потом на 2 (в зависимости от сигнала u2x) . Полученная частота +- равна для чтения 1 бита
Приём идет так. Ждём стартового бита. И потом 3 цикла поделенной частоты считываем значение. Если в 2 из 3 случаев = 0, значит началось. Засечка стартового импульса осуществляется примерно в его середине
Полученная частота подаётся и на передатчик и на приемник
Для того, чтобы передать данные нужно положить их в регистр UDRT, откуда они переносятся в регистр сдвига тут же. Пока в регистре сдвига что-то есть из UDRT они не перемещаются
После этого тактовые импульсы (поделенной частоты) проталкивают биты к пину 1.
Для получения данных используется пин 2
Если установлен флаг rxe (разрешена передача) то идём по схеме дальше. Данные записываются в сдвиговый регистр. При заполнении перемещаются в UDRR. При завершении приёма появляется сигнал в RXE
### Кратко:
**Последовательные порты Универсальный синхронный/асинхронный приемопередатчик (Universal Synchronous/Asynchronous Receiver and Transmitter, UART или USART)** – удобный и простой последовательный интерфейс для организации информационного канала обмена данными между микроконтроллером и внешним миром. Способен работать в [дуплексном режиме](/onA8_sLUSYWhMZUIMEkoZQ)
Модули USART, реализованные в микроконтроллерах семейства, могут обнаруживать следующие внештатные ситуации: переполнение; ошибка кадрирования; ошибка контроля четности.
Usart является альтернативой UART (который только в асинхронке) и может работать как синхронно так и асинхронно
**В синхронном режиме**, для синхронизации приёмного и передающего устройств, с передающей стороны могут посылаться сигналы синхронизации по линии данных, либо **может использоваться отдельная линия синхронизации**. Синхронный режим обычно используется в специфических случаях (например, если необходимо обеспечить высокую скорость передачи данных).
**В асинхронном режиме** - синхронизация осуществляется только **по стартовым битам,** без каких-либо дополнительных сигналов синхронизации, поэтому, для успешной передачи данных, приёмник и передатчик **заранее должны быть настроены на одинаковые скорость обмена и формат пакетов**. Т.к. реализация асинхронного режима проще, то в подавляющем большинстве случаев, для простых задач, используют именно его.
Пакет данных USART состоит из:
стартового бита;
5, 6, 7, 8 или 9 бит данных;
бита контроля чётности (опционально);
1 или 2 стоп-бит.
Формат пакета USART
Здесь:

St - стартовый бит (логический 0);
0-8 - биты данных;
P - бит контроля чётности - может быть проверка на чётность (Even), нечётность (Odd), или отсутствовать;
Sp - стоп биты (логическая 1). Может быть 1 или 2 (для стабильности);
IDLE - нет передаваемых данных (логическая 1).
### Подробнее
:::spoiler Инфо на английском
The Universal Synchronous and Asynchronous serial Receiver and Transmitter (USART) is a highly flexible serial communication device. The main features are:
• Full Duplex Operation (Independent Serial Receive and Transmit Registers)
• Asynchronous or Synchronous Operation
• Master or Slave Clocked Synchronous Operation
• High Resolution Baud Rate Generator
• Supports Serial Frames with 5, 6, 7, 8, or 9 Data Bits and 1 or 2 Stop Bits
• Odd or Even Parity Generation and Parity Check Supported by Hardware
• Data OverRun Detection
• Framing Error Detection
• Noise Filtering Includes False Start Bit Detection and Digital Low Pass Filter
• Three Separate Interrupts on TX Complete, TX Data Register Empty, and RX Complete
• Multi-processor Communication Mode
• Double Speed Asynchronous Communication Mode
:::
Универсальный синхронный и асинхронный последовательный приемник и передатчик (USART) представляет собой очень гибкое устройство последовательной связи. Основные особенности:
• [Полнодуплексный режим]((/onA8_sLUSYWhMZUIMEkoZQ)) (независимые последовательные регистры приема и передачи)
• Асинхронная или синхронная работа
• Синхронная работа с тактовой частотой ведущего или ведомого устройства
• Генератор скорости передачи данных с высоким разрешением
• Поддерживает последовательные кадры с 5, 6, 7, 8 или 9 битами данных и 1 или 2 стоповыми битами.
• Генерация нечетной или четной четности и проверка четности, поддерживаемая аппаратно
• Обнаружение переполнения данных
• Обнаружение ошибок кадрирования
• Фильтрация шума включает обнаружение ложного начального бита и цифровой фильтр нижних частот
• Три отдельных прерывания по завершению передачи, пустому регистру данных передачи и завершению приема.
• Многопроцессорный режим связи
• Двухскоростной асинхронный режим связи

#### Сокращенная схема на понимание

#### Схема на русском

:::spoiler Инфо на английском
XCK - это пин PB0. The XCK pin is active only when the USART operates in Synchronous mode.
Описание XCK: (128 страница)

The dashed boxes in the block diagram separate the three main parts of the USART (listed from the top): Clock Generator, Transmitter and Receiver. Control Registers are shared by all units. The clock generation logic consists of synchronization logic for external clock input used by synchronous Slave operation, and the baud rate generator. The XCK (Transfer Clock) pin is only used by Synchronous Transfer mode. The Transmitter consists of a single write buffer, a serial
Shift Register, parity generator and control logic for handling different serial frame formats. The write buffer allows a continuous transfer of data without any delay between frames. The Receiver is the most complex part of the USART module due to its clock and data recovery units. The recovery units are used for asynchronous data reception. In addition to the recovery units, the receiver includes a parity checker, control logic, a Shift Register and a two level receive buffer (UDR). The receiver supports the same frame formats as the transmitter, and can detect frame error, data overrun and parity errors.
:::
Пунктирные прямоугольники на блок-схеме разделяют три основные части USART (перечислены сверху): генератор тактовых импульсов, передатчик и приемник. Регистры управления являются общими для всех модулей. Логика генерации тактового сигнала состоит из логики синхронизации для входа внешнего тактового сигнала, используемого синхронным ведомым устройством, и генератора скорости передачи данных. Вывод XCK (Transfer Clock) используется только в режиме синхронной передачи. Передатчик состоит из одного буфера записи, последовательного Сдвиговый регистр, генератор четности и логика управления для обработки различных форматов последовательных кадров. Буфер записи позволяет осуществлять непрерывную передачу данных без задержки между кадрами. Приемник является наиболее сложной частью модуля USART из-за его часов и блоков восстановления данных. Блоки восстановления используются для асинхронного приема данных. В дополнение к блокам восстановления приемник включает в себя проверку четности, управляющую логику, сдвиговый регистр и двухуровневый приемный буфер (UDR). Приемник поддерживает те же форматы кадров, что и передатчик, и может обнаруживать ошибки кадров, переполнение данных и ошибки четности.
### Инициализация
:::spoiler Инфа на английском
The USART has to be initialized before any communication can take place. The initialization process normally consists of setting the baud rate, setting frame format and enabling the Transmitter or the Receiver depending on the usage. For interrupt driven USART operation, the Global Interrupt Flag should be cleared (and interrupts globally disabled) when doing the initialization. Before doing a re-initialization with changed baud rate or frame format, be sure that there are no ongoing transmissions during the period the registers are changed. The TXC Flag can be used to check that the Transmitter has completed all transfers, and the RXC Flag can be used to check that there are no unread data in the receive buffer. Note that the TXC Flag must be
cleared before each transmission (before UDR is written) if it is used for this purpose. The following simple USART initialization code examples show one assembly and one C function that are equal in functionality. The examples assume asynchronous operation using polling (no interrupts enabled) and a fixed frame format. The baud rate is given as a function parameter. For the assembly code, the baud rate parameter is assumed to be stored in the r17:r16 registers. When the function writes to the UCSRC Register, the URSEL bit (MSB) must be set due to the sharing of I/O location by UBRRH and UCSRC.
:::
USART должен быть инициализирован до того, как может иметь место какая-либо связь. Процесс инициализации обычно состоит из установки скорости передачи данных, установки формата кадра и включения передатчика или приемника в зависимости от использования. Для операции USART, управляемой прерыванием, флаг глобального прерывания должен быть очищен (и прерывания глобально отключены) при выполнении инициализации. Перед выполнением повторной инициализации с измененной скоростью передачи данных или форматом кадра убедитесь, что в течение периода изменения регистров не было текущих передач. Флаг TXC можно использовать для проверки того, что передатчик завершил все передачи, а флаг RXC можно использовать для проверки отсутствия непрочитанных данных в приемном буфере. Обратите внимание, что флаг TXC должен быть
очищается перед каждой передачей (перед записью UDR), если он используется для этой цели. В следующих простых примерах кода инициализации USART показаны одна сборка и одна функция C, которые имеют одинаковую функциональность. В примерах предполагается асинхронная работа с использованием опроса (прерывания не разрешены) и фиксированный формат кадра. Скорость передачи задается как функциональный параметр. Для ассемблерного кода предполагается, что параметр скорости передачи хранится в регистрах r17:r16. Когда функция записывает в регистр UCSRC, бит URSEL (MSB) должен быть установлен из-за совместного использования местоположения ввода-вывода UBRRH и UCSRC.