Ардуино выступает как посредник между компьютером и устройством (например - клавиатурой)
Два пина ардуины принимают сигнал (rx от компа и rx от клавиатуры), и два пина ардуины передают сигнал (tx на комп и rx на клавиатуру).
При этом записывать все данные на microsd
jcmvbkbc:
1) на USB нет Rx и Tx, там дифф. пара. Через пины ардуино такое не сделать, хотя бы CPLD или FPGA надо. Даже инициализацию USB 2.0 не получится пробросить - там особый алгоритм с включением и отключением терминации линий
2) скорость - скорости на USB 1.1 даже может и хватит. 2.0 не осилит
3) логические уровни - ардуино 5в, шина данных USB 3.3в
4) Нарушение временных интервалов. В юсбе всем рулит комп, он сообщает точные моменты времени, когда устройство может вещать в линию. Ардуино внесет недетерминированную задержку всех сигналов, расписание полетит к черту.
Реализовать реально, но не ардуиной и не тупым повторением сигналов на физическом уровне. Требуется промежуточное устройство, что-то типа умного USB хаба, которое перехватит данные на логическом уровне.
15432: нет, понятно, что пропускать поток сквозь ардуину незачем -- можно сделать просто ответвление в её сторону, это должно решить массу проблем. Дифференциальный сигнал нельзя ли простой аналоговой схемой обработать, зачем там программируемая логика?
> скорости на USB 1.1 даже может и хватит
разве что на low speed.
jcmvbkbc: именно в том виде, как предложил автор (два пина принимают, два передают) сделать нельзя.
параллельно линии сделать "врезку" и записывать все сигналы на линии - можно, но тут возникают проблемы:
- сырой поток данных, снятый с линии, нужно успевать захватывать и сразу же где-то хранить. при подключенном устройстве по шине данных всегда гуляет очень много служебной информации (те же старты фреймов). знакомый имеет для таких целей 2 ГГц логический анализатор с встроенным SSD для поточной записи (и то продолжительность захвата сильно ограничена)
- декодировать захваченные данные (а это будет несколько десятков гигабайт) с физического уровня совсем не тривиально, необходимо будет отделить служебные данные, отделить данные, относящиеся к различным конечным точкам (Bulk, Interrupt, Control), наконец, проанализировать содержимое пакетов (например если это флешка, распарсить SCSI протокол).
гораздо удобнее принимать, анализировать и сохранять уже на уровне пакетов данных
jcmvbkbc: По объёму полезных данных - да. На деле происходит опрос готовности передачи 1 или 8 раз в миллисекунду.
USB has a start of frame packet or keep alive sent periodically on the bus. This prevents an idle bus from entering suspend mode in the absence of data.
•A high speed bus will have micro-frames sent every 125.0 µs ±62.5 ns.
•A full speed bus will have a frame sent down each 1.000 ms ±500 ns.