J'ai une application où j'ai un microcontrôleur (NXP LPC1343 ) qui est connecté à un FPGA via SPI 16 bits. Il existe également une carte SD utilisant le même port SPI (MISO / MOSI) mais avec une broche CS / SS différente (les deux sont actives à l'état bas, conformément à la spécification SPI). L'une des choses que je dois faire est d'écrire des données du FPGA sur un fichier sur la carte SD en utilisant FAT32 , et c'est le travail du microcontrôleur. Le microcontrôleur exécute FatFS , que j'ai réussi à utiliser de manière fiable par lui-même.
Étant donné que le microcontrôleur ne dispose que d'une petite quantité de RAM, seule une petite quantité de données peut être mise en mémoire tampon à la fois. Par conséquent, le micro doit lire un tampon du FPGA, changer le mode SPI en 8 bits, puis écrire ces données dans le FATFS. Rappelons que pour configurer la carte SD en mode SPI, une commande doit être envoyée pendant que le bus SPI fonctionne à 400 kHz, et une certaine attente doit se produire. Par conséquent, je voudrais avoir à effectuer l'initialisation une seule fois.
Cependant, effectuer des transactions sur le FPGA même en maintenant CS haut sur la carte SD semble mettre la carte SD dans un état étrange au point de devoir à nouveau passer par l'initialisation. Bien sûr, cela n'est pas souhaitable, car l'initialisation peut prendre plusieurs millisecondes, afin d'écrire seulement 4 Ko environ de données (encore une fois limité par la petite capacité RAM de mon micro). Comme j'ai besoin d'écrire plusieurs mégaoctets le plus rapidement possible, cela réduit les performances d'environ 500 ko / s à moins de 100 ko / s.
Je suis conscient que les cartes SD ne sont pas techniquement entièrement conformes SPI, mais comment résoudre ce problème?