SAMV71 USB Mass Storage Host очень медленно
Я попробовал пример, предоставленный ASF atmel на USB-накопителе, для отправки / чтения файла на USB-накопитель. При чтении файла, я получаю скорость 1,7 МБ / с, я пробовал много решений, которые включают в себя:
- Убедитесь, что он работает в высокоскоростном режиме, а плата работает на частоте 300 МГц.
- Попытался увеличить размер буфера для функции F_read, и мне удалось увеличить его до 2,2 МБ / с.
- Я сам проверил файловую систему FAT32 на примере виртуальной памяти и получил 30 МБ / с на операции чтения (не уверен, что это полезно для скоростной отладки)
- Я пытался использовать ту же программу, кроме чтения с SD-карты, которая дала мне выход 1 МБ / с
- Я также проверил его в режиме полной скорости, и он дал мне скорость 0,66 МБ / с.
- Одна из крайних идей, которую я протестировал, состояла в том, чтобы запустить две платы, одну в режиме хоста, а другую в режиме устройства, затем я проверил скорость передачи данных по USB, и в режиме Bulk Mode он выдал мне 1,66 МБ / с. (работает на HS)
попробовал примеры Keil, которые дали мне худшие результаты, чем у Atmel.
Может кто-нибудь, пожалуйста, предложить решения? Я прочитал всю документацию по связи через USB, предоставленную Atmel и Keil.
1 ответ
В стеке USB накопителя Atmel отсутствует многосекторное чтение и запись, хотя уровень SCSI действительно реализует правильную команду для получения множества секторов подряд (см. Uhi_msc_scsi_read_10). Уровень абстракции, считывающий данные над командами SCSI (например, uhi_msc_mem_read_10_ram и uhi_msc_mem_write_10_ram), читает только сектор за сектором, что приводит к очень низкой производительности.
Для достижения высокой скорости USB (~35 МБ / с) вам придется взломать эти функции (и все вышеперечисленные слои), чтобы использовать чтение / запись в нескольких секторах.