Разработка электроники,
Систем автоматики,
Программного обеспечения
ООО "Антех ПСБ", Санкт-Петербург
+79811865082
anteh@bk.ru
Телеграм: собака antehru
Сайт https://anteh.ru
Переделка NM9845 RS232 6x, FG-PIO9845-6S-01-CT01, увеличение максимальной скорости обмена.
Нужно было реализовать обмен по RS232 между двумя компьютерами. Купил соответственно мульти портовую PCI карточку на 6 RS232 портов. По документации, как производителя, так и продавца она обеспечивала 1 Мегабит в секунду. В решаемой задаче, чем больше, тем лучше. Стандартная максимальная скорость 115200 бит/c. По факту оказалось, что вместо заявленного 1го мегабита было максимум 115.2 килобита, этого было мало. Обменять было не на что, у продавца все модели максимум на 115200 оказались -по документации на используемые микросхемы.
Для переделки FG-PIO9845-6S-01-CT01 из максимум 115200 кбод/с в 460800 кбод/с нужно:
перепаять джампер JP1 на место JP3, это поднимет тактовую частоту ST16C554D c 1.84352 MHz до 7.37407 MHz
JP1 -1.84352 MHz
JP2 -3.68704 MHz
JP3 -7.37407 MHz
Согласно даташиту ST16C554D
Драйвер операционной системы использует значение baud rate из первой колонки, а по факту, при перепаянном джампере на JP3 baud rate будет в 4ре раза больше. Т.е. если выбрана 115200, то реально работает на 460800. Причём операционная система не знает, что реальная скорость выше. И это никак ни кому не мешает, просто данные передаются быстрее. Т.е. в части исходного кода, где производится инициализация com порта прописываем baudrate 115200, когда реально будет 460800. Есть особенность, что при перепаянном на JP3 джампере, COM порты S1 и S2 продолжают работать на скорости 115200, а S3, S4, S5, S6 работают на учетверённой скорости.
Хоть в даташите на микросхему драйвера RS232 UTC75232L прописана максимальная скорость 115200, но и на 460800 фронты удовлетворительные -по показания осциллографа. По факту пришлось сбросить с 460800 до 230400. Т.е. JP3 остался на месте, но в настройках программ выставил скорость 57600, что умноженное на 4 даёт 230400 -реальная скорость обмена. Наблюдались редкие ошибки, раз в несколько дней, при обмене. Алгоритм обмена был самописный и без контроля на правильность передачи, да и использовать драйвер RS232 UTC75232L в подобном режиме не очень правильно. Сейчас связка из 2х таких переделанных карточек работает 1.5 года круглосуточно, температура комнатная, длина соединяющего RS232 кабеля 1.5метра.
Установка NM9845
/boot/device.hints не редактируем
uart заменяет sio и имена устройств меняются на uart. Соответственно, девайсы cuadX переименовались в cuauX.
Ядро перекомпилируем с параметрами:
Option COM_MULTIPORT
device uart
device puc
Больше ничего нигде прописывать не нужно
Имена COM портов буду /dev/cuauX где X=0, 1, 2, 3, …
Обязательно выключаем и включаем компьютер, с отключением шнура питания от розетки. Без этого не хотело работать. Было и такое, выключаем PC, после шнур из розетки, вытаскиваем карточку, через 5 минут вставляем обратно в PCI слот. Всё включаем и система карточку не видит. Далее нужно опять всё выключить с выдёргиванием шнура из розетки и включить заново, тогда всё начинало работать.
Проверяем, что всё установилось правильно:
# dmesg | grep puc
puc0: <NetMos NM9845 6 Port UART> port 0xec00-0xec07,0xe880-0xe887,0xe800-0xe807,0xe480-0xe487,0xe400-0xe407,0xe080-0xe08f irq 16 at device 7.0 on pci1
puc0: [FILTER]
uart2: <Non-standard ns8250 class UART with FIFOs> at port 1 on puc0
uart3: <Non-standard ns8250 class UART with FIFOs> at port 2 on puc0
uart4: <16550 or compatible> at port 3 on puc0
uart5: <16550 or compatible> at port 4 on puc0
uart6: <16550 or compatible> at port 5 on puc0
uart7: <16550 or compatible> at port 6 on puc0
Здесь можем видеть, что первые 2 порта какие-то не такие, может поэтому они как работали на 115200, так и остались 115200 после увеличения скорости обмена.
# dmesg | grep uart
uart2: <Non-standard ns8250 class UART with FIFOs> at port 1 on puc0
uart2: [FILTER]
uart3: <Non-standard ns8250 class UART with FIFOs> at port 2 on puc0
uart3: [FILTER]
uart4: <16550 or compatible> at port 3 on puc0
uart4: [FILTER]
uart5: <16550 or compatible> at port 4 on puc0
uart5: [FILTER]
uart6: <16550 or compatible> at port 5 on puc0
uart6: [FILTER]
uart7: <16550 or compatible> at port 6 on puc0
uart7: [FILTER]
uart0: <16550 or compatible> port 0x3f8-0x3ff irq 4 flags 0x10 on acpi0
uart0: [FILTER]
Если ASP.NET проект работающий под MONO использует COM порт, то нужно разрешить доступ к COM портам пользователю www. Апач сидит на www. Для этого пользователя www нужно добавить в группу dialer
# pw groupmod dialer -M www //Добавление нескольких пользователей к группе
# pw groupshow dialer
dialer:*:68:www