2016-04-06 1 views
1

J'ai essayé l'exemple fourni par ATMF sur un hôte de stockage de masse USB d'atmel pour envoyer/lire un fichier sur un périphérique de stockage flash USB. Lors de la lecture d'un fichier, je reçois 1,7 Mo/s vitesse, j'ai essayé beaucoup de solutions, qui comprennent:SAMV71 hôte de stockage de masse USB extrêmement lent

  • suis assuré son fonctionnement en mode haute vitesse, et la carte est en cours d'exécution sur 300 mhz
  • Essayé augmenter la taille de la mémoire tampon pour la fonction F_read, et je réussi à augmenter à 2,2 Mo/s
  • Je l'ai testé le système de fichiers, il auto, qui est FAT32 sur une mémoire virtuelle exemple, et a obtenu 30 Mo/s sur les opérations de lecture (pas sûr si c'est utile pour déboguer la vitesse)
  • Je ai essayé d'utiliser le même programme, sauf lecture d'une carte SD, qui m'a donné une sortie de 1 Mo/s
  • Je l'ai également testé en mode pleine vitesse et il m'a donné une sortie de 0,66 Mo/s. Une idée extrême que j'ai testé fonctionnait deux cartes, une en mode hôte, et l'autre en mode périphérique puis j'ai testé la vitesse de transfert de l'USB , il m'a donné une sortie de 1,66 Mo/s en mode vrac. (fonctionnant sur HS)
  • essayé les exemples de Keil qui m'ont donné les plus mauvais résultats que ceux d'Atmel.

    quelqu'un peut-il s'il vous plaît suggérer des solutions? J'ai lu toute la documentation concernant la communication USB fournie par Atmel et Keil.

+0

Comment obtient-il réellement les données du contrôleur hôte? DMA? Interruptions FIFO? Vote? Ce serait la première chose que j'examinerais. – Notlikethat

Répondre

1

pile USB de stockage de masse Atmel n'a pas lire et écrire plusieurs secteurs, bien que la couche SCSI implémente en effet la commande appropriée pour obtenir de nombreux secteurs de suite (voir uhi_msc_scsi_read_10). La couche d'abstraction qui lit les données au-dessus des commandes SCSI (uhi_msc_mem_read_10_ram et uhi_msc_mem_write_10_ram par exemple) ne lit que secteur par secteur, ce qui donne de très mauvaises performances. Pour obtenir des performances USB haute vitesse (~ 35 Mo/s), vous devrez pirater ces fonctions (et toutes les couches ci-dessus) pour utiliser la lecture/écriture multisecteur.