2017-08-24 3 views
1

J'ai la tâche d'écrire un pilote PCI basé sur KMDF pour Windows. Fondamentalement, l'objectif est d'écrire des données sur la RAM qui est sur une carte FGPGA (la carte n'existe pas encore). Une interface PCI sur le FPGA permettra aux données d'être directement lues et écrites dans la RAM FPGA.WINDOWS KMDF PCI DRIVER: - API pour écrire des données à l'adresse virtuelle MemoryMapped

L'idée est que les informations de mappage de mémoire nécessaires seront stockées dans le registre BAR0. Le type de descripteur de mémoire serait CmResourceTypeMemory. La première étape serait de lire les informations du registre BAR0 et de créer une carte mémoire.

En utilisant une autre carte, j'ai écrit un pilote de base qui effectue ce qui précède.

Cependant, une fois que j'ai l'adresse mémoire (virtuelle), je voudrais alors lire et écrire à partir de cette mémoire. Je remarque que Windows a des API pour lire et écrire sur les ports et les registres. Y a-t-il quelque chose d'équivalent pour écrire et lire différentes quantités de données à l'adresse virtuelle: - I.E. Copier un tampon de données à l'adresse virtuelle. Copier directement semble être une option, mais je soupçonne qu'il peut y avoir une API pour effectuer cela.

J'ai regardé divers exemples de github PCI, mais ils ont tendance à utiliser registre et port lecture et écriture.

+0

La valeur de retour de [MmMapIoSpace] (https://msdn.microsoft.com/fr-fr/library/windows/hardware/ff554618 (v = vs.85) .aspx) sera un pointeur que vous pouvez utiliser pour lire et écrire la RAM FPGA. –

+0

Merci pour la réponse. J'utilise MmMapIoSpace pour obtenir l'adresse virtuelle. Je prévois d'utiliser RtlCopyMemory pour copier les données à l'adresse virtuelle. Ces données proviendront d'un tampon IORequest. Pour le moment, je n'ai aucun matériel pour le confirmer. –

Répondre

0

Utilisez les routines READ_REGISTER_BUFFER_xxx et WRITE_REGISTER_BUFFER_xxx. Voir la section HAL Library Routines dans la documentation MSDN.