#serial-port #ethernet #can-bus
#последовательный порт #ethernet #can-bus
Вопрос:
Для проекта мне нужно установить связь в сети CANBus, сети Ethernet и с помощью RS-232. Я хочу использовать один MCU, который будет выступать в качестве основного блока топологии запуска CANBus, топологии запуска Ethernet, и этот MCU также будет передавать данные RS232, которые поступают на него, на другое устройство. Теперь я хочу использовать высокоскоростную CAN, которая может достигать 1 Мбит в секунду. Однако скорость передачи данных по RS-232 не превышает 20 тыс. Интересно, возможно ли с помощью 1 микроконтроллера обрабатывать 3 разных канала связи (CANBus, ethernet и RS-232). Я боюсь, что в какой-то момент данные будут переполнены. Я могу кратковременно буферизировать данные, если данные поступают пакетами, которые можно усреднить. Для непрерывных данных, за которыми я никогда не смогу следить, мне нужно будет отбрасывать сообщения, возможно, управляемым способом. Но я не хочу отбрасывать какие-либо данные. Итак, мой вопрос: будет ли использовать 1 MCU для этого случая? И есть ли какие-либо программные приемы, которые помогли бы мне в этом случае? (Например, присвоение CANBus более высокого приоритета и т. Д.)
Комментарии:
1. Вам необходимо написать спецификацию, которая учитывает требования реального времени. Сколько данных отправляется, с какой скоростью и как быстро их нужно обрабатывать, каково время отклика системы и так далее.
2. Будет 4 диагностических сообщения Can со скоростью 1 Мбит, и мне нужно обработать их как можно быстрее. Я думаю, что линия RS-232 будет 9600 бод и 10 Мбит ethernet.
3. Это не большая часть спецификации в реальном времени. Скорость передачи данных мало что говорит, важно то, как часто вы отправляете / получаете данные и сколько времени у вас есть на обработку того, что должна делать программа.
Ответ №1:
Да, это можно сделать с помощью одного микроконтроллера. Даже простой микроконтроллер должен легко поддерживать скорость передачи данных 1 Мбит / с. Скорее всего, вы хотите использовать передачу с поддержкой DMA, поэтому ядру процессора потребуется действовать только после завершения передачи части данных.
Проблема переполнения данными из-за несоответствия скорости передачи данных — отдельная тема:
- Если несоответствие сохраняется, ни одна система не сможет с ним справиться, независимо от того, насколько она способна.
- Если несоответствие временное, это просто функция доступного размера буфера.
Итак, если в худшем случае вы хотите обработать 10 с входящих данных со скоростью 1 Мбит / с (при исходящей скорости 20 Кбит / с), то вам потребуется 10 с x (1 Мбит / с — 20 Кбит / с) = 9,8 Мбит = 1,225 Мбайт буферной памяти.
Комментарии:
1. Спасибо за ответ и что вы подразумеваете под «передачей с поддержкой DMA»?
2. DMA (или прямой доступ к памяти) является особенностью большинства микроконтроллеров (за исключением микроконтроллеров с очень низким диапазоном) для автоматической передачи данных с периферийных устройств, таких как UART или CAN, в память или наоборот. Он может быть сконфигурирован таким образом, что сотни байт данных передаются или принимаются периферийным устройством без участия ядра процессора. Он будет уведомлен, когда передача будет завершена. Это также очень ценно, поскольку позволяет осуществлять несколько параллельных передач.
3. Я думаю, это снижает загрузку процессора. Это также уменьшает использование памяти относительным образом?
4. Это снижает нагрузку на процессор и увеличивает параллелизм. Но это не уменьшает использование памяти, которое определяется разницей в скорости передачи данных и максимальным временем буферизации.