Можно ли изменить USB-протоколы в Linux?

Если все ссылки такие же правильные, как и выглядят, вы можете попробовать это:

results=147
for ((i=0; i<147; i++)); do
    base=ftp://ftp.sra.ebi.ac.uk/vol1/fastq/ERR445/
    ext=$((445410+i))
    suff=.fastq.gz
    for j in 1 2; do wget "${base}${ext}/${ext}/_${j}${suff}"; done
done

Насколько я вижу, в этой загрузке нет ничего рекурсивного. Проверка адреса ссылки дает некоторую подсказку:

ftp://ftp.sra.ebi.ac.uk/vol1/fastq/ERR445/ERR445410/ERR445410_1.fastq.gz
ftp://ftp.sra.ebi.ac.uk/vol1/fastq/ERR445/ERR445410/ERR445410_2.fastq.gz
ftp://ftp.sra.ebi.ac.uk/vol1/fastq/ERR445/ERR445411/ERR445411_1.fastq.gz
ftp://ftp.sra.ebi.ac.uk/vol1/fastq/ERR445/ERR445411/ERR445411_2.fastq.gz

Таким образом, должно быть только три части, которые меняются между ними:

ERR<nr>/ERR<nr>_<1 or 2>

Шаг для ERRравен 1, а количество результатов равно 147, что дает полный ответ, если предположить, что это все в этой истории. Поэтому после того, как вы закончите загрузку, подсчитайте новые файлы и убедитесь, что у вас их 2 *147.

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

0
04.04.2020, 19:18
1 ответ

USB — это не «просто последовательный порт» ни в каком смысле, который соответствовал бы старому стандарту последовательного порта RS -232 (, также известному как EIA/TIA -232 ). Вы не можете превратить USB в RS -232, «отключив дополнительные требования».

В отличие от классических последовательных портов RS -232, USB использует дифференциальную сигнализацию :на самом деле немного (очень мало )как RS -485, хотя уровни сигнала и другие электрические характеристики сильно отличаются.

RS -232 может использовать напряжение сигнала до +/ -15 вольт :USB использует <0,3 В для низкого логического уровня и 2,8 -3,6 вольта для высокого логического уровня в режимах USB 1; в высокоскоростном режиме USB 2 -напряжения еще меньше.

Даже если логические уровни TTL (0..5V )используются в RS -232, передатчик USB не сможет генерировать RS -232 "пробел" (= выше -состояние напряжения )сигнализирует надежно. Уровни сигналов просто не совпадают между этими стандартами :сигнал передатчика USB будет слишком слабым для приемника RS -232 UART, а выходной сигнал RS -232 перегрузит приемник USB.

С простой схемой преобразователя уровней не обойти несовместимость, либо :вместо отправки всего одного стартового бита, затем одного байта данных, а затем одного-двух стоповых битов, USB-трансивер имеет дело с пакетами. В начале пакета должна быть последовательность синхронизации (8 бит для USB 1; 32 бита для высокоскоростной -передачи USB 2 ), затем передаются несколько байтов и, наконец, сигнал конца -из -пакета, который не будет соответствовать ни нормальному «логическому низкому», ни «логическому высокому» " состояния. Все это может быть реализовано аппаратно для повышения эффективности, и, поскольку обычно нет причин делать что-то другое, вероятно, нет никаких условий для обхода этого для «битового -удара» фактических линий данных при прямом программном управлении.

Сравните примеры сигналов RS -232 и USB 1.1 в Википедии.

Подводя итог :нет, проблема в том, что различия между USB и RS -232 слишком велики на фактическом аппаратном уровне.

3
28.04.2021, 23:18

Теги

Похожие вопросы