Сижу, читаю, разбираюсь. вроде нашел как читать и как передавать пакеты через libpcap. но как заставить выполняться функции MACPauseOn() и MACPauseOff(), которые присутствуют в PIC18F97J60 ? Это Flow control on и Flow control off соответственно.
Суть в том, что скорость Ethernet больше, чем скорость спутника. И что бы пакеты не терялись и вставали в очередь есть функции у пика MACPauseOn() и MACPauseOff(). Как такое сделать в libpcap я не понимаю.
PS нашел как управлять очередью, но возникают вопросы - можно ли дуплекс менять на горячуюю(из программы под линуксом) (или как задать полудуплекс при загрузке?) и можно ли бит BP: Back pressure в регистре EMAC_NCR дрыгать для управления очередью?
комп <=витая пара(Ethernet)=> плата с G45 <=SPI=> другая плата с G45 <=витая пара=> другой комп
проблема в том, что у меня в проекте SPI надо использовать на определенных скоростях(небольших, до 2 мегабит). и теперь стоит задача ограничить прием со стороны компьютера. то есть давать какую либо команду для приостановки передачи пакетов так как по SPI еще выдвигается предыдущий пакет.
Пример работы с spidev есть в любой документации на ядро.
Там всего одна функция полнодуплексного приёма-передачи.
По Ethernet стандартные сокеты... tcp/udp вообще не проблема. Можно хоть Modbus TCP заюзать стандартную либу какую нибудь.
Но я не пойму нафига вообще эти сложности ? Зачем связь по SPI ? Длина канала по SPI ограничевается десятком сантиметров. Интерфейс вообще предназначен для связи ИМС в пределах одной платы. В чём смысл задачи вообще ?
SPI тут для связи с ПЛИС, можно и не SPI, что удобней будет(хоть параллельная шина адреса данных).
суть в том, что мне надо принять пакет с сети Ethernet, добавить метки синхронизации и контрольной суммы(чтоб быть уверенным, что пакет через канал связи придет целым) и передать это в буфер на ПЛИС. ПЛИС уже в свой последовательный канал будет пихать как ей надо будет.
загвоздка в том, что пока ПЛИС не передаст пакет(не освободится место в буфере) проц G45 не должен туда писать(засовывать в буфер) новые данные. то есть надо сказать компу, чтобы он "подождал чуток". и вот как эту паузу сделать я не знаю.
пока буфер не передан ПЛИС выставляет сигнал Занято sam9g45. Тот в свою очередь не пишет данные в ПЛИС, шлет компьютеру сигнал занятно. Либо буфферизирует, поступающую информацию. Для сигнала Занятно можно любой сигнал GPIO использовать для связи с ПЛИС. Компьютеру же Занятно обьявить по какому либо протоколу интерфейса Ethernet. Вариантов реализации масса.
А вы так и не нарисовали полную блок-схему задачи...
Телепаты в отпуске.