2016-04-06 2 views
1

Я попробовал пример, предоставленный ASF atmel на USB-накопителе большой емкости для отправки/чтения файла на USB-накопитель. При чтении файла, я получаю скорость 1,7 Мб/с, я пробовал много решений, которые включают в себя:SAMV71 USB Mass Storage Host чрезвычайно медленный

  • Убедился его работы в режиме высокой скорости, а также плата работает на 300 МГц
  • Попробовал увеличить размер буфера для функции F_read, и я удалось увеличить его до 2,2 Мб/с
  • Я проверял файловую систему это самоощущение, которое FAT32 на виртуальной памяти например, и получил 30Мб/с (не уверены, что то, что полезно для целей быстрой отладки)
  • Я пробовал использовать ту же программу, кроме чтения с SD-карты, которую дал мне выход 1 МБ/с
  • Я также тестировал его на полноскоростном режиме, и дал мне выход 0,66 МБ/с.
  • Одна из экстремальных идей, которые я тестировал, выполняла две платы, одна в режиме хоста, , а другая в режиме устройства, после чего я протестировал скорость передачи на USB-порту , и дал мне выход 1,66 МБ/с в режиме Bulk. (работает на HS)
  • попробовал примеры Keil, которые дали мне худшие результаты, чем Atmel's.

    Может кто-нибудь предложить решения? Я прочитал всю документацию относительно USB-связи, предоставляемой Atmel и Keil.

+0

Как получить данные с главного контроллера? DMA? FIFO прерывает? Опрос? Это было бы первым делом, за которое я бы заглянул. – Notlikethat

ответ

1

масса стек хранения USB компании Atmel не хватает многосекторное читать и писать, хотя слой SCSI действительно реализует соответствующую команду, чтобы получить много секторов в ряд (см uhi_msc_scsi_read_10). Уровень абстракции, считывающий данные выше команд SCSI (например, uhi_msc_mem_read_10_ram и uhi_msc_mem_write_10_ram), считывает только сектор по секторам, что дает очень низкую производительность.

Для достижения высокой скорости работы USB (~ 35 МБ/с) вам придется взломать эти функции (и все слои выше), чтобы использовать чтение/запись нескольких секторов.

Смежные вопросы