Найти в Дзене

Увеличение скорости UART свыше 3 Мбит/с на Raspberry Pi 4, Raspberry Pi 5

По-умолчанию на Raspberry Pi 4 и Raspberry Pi 5 максимальная скорость UART ограничена частотой 3 МГц. Под частотой здесь подразумевается частота передачи битов в порт, битрейт или boudrate. Естественно, возникают случаи, когда битрейт необходимо повышать. Драйвер контроллера UART использует ФАПЧ (PLL) для получения входной частоты, которую затем делит на 16. Частота PLL определяет максимальный битрейт UART. По-умолчанию ФАПЧ всех Raspberry Pi настроен на частоту 48 МГц. Отсюда следует, что 48_000_000 / 16 = 3_000_000. Т.е. UART имеет максимальный битрейт 3 Мбит/с, а значит необходимо увеличить частоту, выдаваемую PLL. Внимание! Производители Raspberry Pi предупреждают, что данные мероприятия лишают вас гарантии. Я, естественно, тоже снимаю с себя ответственность за порчу ваших Raspberry Pi и подключенных к ним устройств. В данном случае все просто. Открываем файл конфигурации "малинки" командой: sudo nano /boot/config.txt В начале файла добавляем строку: init_uart_clock=64000000 Сохран
Оглавление

По-умолчанию на Raspberry Pi 4 и Raspberry Pi 5 максимальная скорость UART ограничена частотой 3 МГц. Под частотой здесь подразумевается частота передачи битов в порт, битрейт или boudrate. Естественно, возникают случаи, когда битрейт необходимо повышать.

Драйвер контроллера UART использует ФАПЧ (PLL) для получения входной частоты, которую затем делит на 16. Частота PLL определяет максимальный битрейт UART. По-умолчанию ФАПЧ всех Raspberry Pi настроен на частоту 48 МГц. Отсюда следует, что 48_000_000 / 16 = 3_000_000. Т.е. UART имеет максимальный битрейт 3 Мбит/с, а значит необходимо увеличить частоту, выдаваемую PLL.

Внимание!

Производители Raspberry Pi предупреждают, что данные мероприятия лишают вас гарантии. Я, естественно, тоже снимаю с себя ответственность за порчу ваших Raspberry Pi и подключенных к ним устройств.

Увеличение скорости UART на Raspberry Pi 4

В данном случае все просто. Открываем файл конфигурации "малинки" командой:

sudo nano /boot/config.txt

В начале файла добавляем строку:

init_uart_clock=64000000
-2

Сохраняем, перезагружаем одноплатник командой:

sudo reboot

В Raspberry Pi 4 UART использует свой PLL, максимальная частота которого равна 64 МГц. Командой init_uart_clock мы увеличили частоту до максимально возможной, увеличив, тем самым, максимальный битрейт UART до

64 МГц / 16 = 4 МГц

Увеличение скорости UART на Raspberry Pi 5

Тут сложнее, чем с Raspberry Pi 4. Теперь UART не имеет отдельного генератора частоты, а задействует системный, но в целых 100 МГц. Команда init_uart_clock больше не поддерживается, поэтому для "разгона" необходимо написать свой драйвер (в случае с "малинкой" будет правильнее сказать "оверлей").

В начале необходимо установить компилятор оверлеев для Raspberry Pi.

sudo apt install device-tree-compiler

Далее, в домашнем каталоге создаем текстовый файл uart-overclock.dts со следующим содержанием:

#include <dt-bindings/clock/rp1.h>
/dts-v1/;
/plugin/;
/ {
//compatible = "brcm,bcm2712";
fragment@0 {
target = <&rp1_clocks>;
__overlay__ {
assigned-clocks = <&rp1_clocks RP1_CLK_UART>;
assigned-clock-rates = <100000000>; // RP1_CLK_UART
};
};
};

Предвосхищая события скажу, что при компиляции может возникнуть ошибка "не найден файл rp1.h". В таком случае поменяйте первую строку с относительным путем #include <dt-bindings/clock/rp1.h> на абсолютный путь:

#include "/usr/src/linux-headers-6.6.51+rpt-common-rpi/include/dt-bindings/clock/rp1.h"

Но, имейте в виду, что со временем абсолютный путь изменится и файл rp1.h придется найти самостоятельно.

Далее компилируем драйвер командами:

cc -x assembler-with-cpp -E uart-overclock.dts -o temp -I ~/apps/rpi/linux-pi5/include
dtc temp -o uart-overclock.dtbo

В домашнем каталоге появятся файлы temp и uart-overclock.dtbo.

Файл temp можно удалить, а uart-overclock.dtbo необходимо скопировать в папку /boot/firmware/overlays.

Далее открываем файл настроек командой:

sudo nano /boot/firmware/config.txt

В секцию [all] подключаем наш оверлей строкой:

dtoverlay=uart-overclock
-3

Сохраняем файл, перезагружаем Raspberry Pi 5:

sudo reboot

На этом всё. Тактовая частота UART увеличена до 100 Мгц, а битрейт, соответственно, до 100_000_000/ 16 = 6_250_000 --> 6,25 Мбит/с.

-4

Проверено осциллографом.