Fabrication carte PCI

Salut à tous!

Je prévois de réaliser un projet de carte PCI pour PC (et MAC peut être :stuck_out_tongue: ) qui fera de l’acquisition MIDI (depuis un instrument de musique quelconque normalisé Général MIDI).
Un driver communiquera avec la carte, et un logiciel permettra d’utiliser le driver (classique) pour recevoir ou émettre des messages vers le réseau MIDI.

J’ai fait des recherches et je dispose de quasiment toutes les infos qui me sont nécessaires (notamment le brochage du connecteur PCI, et les spécifications de la norme MIDI).

Par contre une de mes interrogations reste sans réponses. Donc si il y a des pros de l’architecture PC ici, ils pourront sûrement m’expliquer :stuck_out_tongue:

Sur les cartes ISA, il me semble que les adresses des cartes sont préprogrammées dans la carte (l’utilisateur peut changer l’adresse à l’aide d’un logiciel fourni par le constructeur, pour ne pas avoir de conflits).

Pour les cartes PCI, il me semble que l’ordinateur va attribuer une adresse à chaque carte. Est ce exact?

Si c’est bien ça, comment sont attribuées les adresses? (car il faut que je conçoive ma carte pour qu’elle décode l’adresse qui lui a été attribuée dynamiquement)
Comment faire, dans la programmation de mon driver, pour qu’il sache quelle adresse a été donnée a ma carte PCI, de manière à pouvoir communiquer avec elle?

Voilà, si des gens peuvent m’éclairer dans mes recherches ce serait simpa :stuck_out_tongue:

Merci bien, bonne soirée, bye!

ÉDIT: le premier driver que je vais créer pour cette carte, une fois que je l’aurais réalisée, sera un driver Linux, donc si vous avez des suggestions à ce propos, des conseils… je n’ai encore jamais fait de driver pour cartes PCI, peut être y a t-il des particularités importantes à prendre en compte.

Up!

Voici un site intéressant sur le sujet:
http://ogloton.free.fr/midi/index.html

Si mes souvenirs sont bons, il y a une petite mémoire sur la carte qui par l’utilisation d’un masque indique la quantité de mémoire adressable souhaitée par la carte.
Pendant la phase d’initialisation du bus, le contrôleur lit cette mémoire, calcule à quel endroit il va mapper la carte et écrit dans cette fameuse mémoire l’adresse allouée.

A vérifier mais il me semble que c’est ça.

Yep, c’est ça je me souviens maintenant. :stuck_out_tongue:
Il y a une mémoire de 256 octets (sur la carte PCI bien sûr) qui contiennent entre autres un identifiant de matériel (class-code), d’objet (device), de vendeur (qu’il faut déposer si tu comptes commercialiser ta carte). Pour le type de matériel il faut que tu chopes la liste existante et prendre l’id des cartes son par exemple. De toute façon si c’est pour une utilisation perso et que c’est toi qui fais le driver, ça n’a pas beaucoup d’importance.

Ces 256 octets vont également contenir la vitesse de ta carte (33 ou 66Mhz) et différentes infos sur la manière dont elle peut communiquer.

En gros tu dois avoir un truc comme ça (toujours de tête :stuck_out_tongue: ) :

16 bits : ID vendeur (ça il faut le dépose sinon tu squattes ou invente)
16 bits : ID device (là tu choisis)
16 bits : ID version (bah ta version de carte)
16 bits : ID class-code (genre ici il y a un code qui veut dire carte son, un qui dit carte réseau, …)
64 bits : sur les capacités de ta carte, vitesse & co…
xx bits : sûrement des trucs que j’oublie
Ensuite il y a 2 zones : REG et BAR. Je ne me souviens plus exactement de la manipulation, mais en gros tu spécifies tes besoins d’adressage dedans et à l’initialisation le contrôleur va remplir le tout avec les adresses qu’il t’alloue.
Et il me semble que tu peux lui demander jusqu’à 6 zones différentes.

Si tu veux plus de détail, il faut que tu mettes la main sur la spec pci, mais elle doit être payante. J’en ai une qui doit traîner dans mes archives chez mes parents, mais je n’y retourne que pour Noël. Et j’en ai au labo mais je n’y retourne pas avant janvier non plus… :stuck_out_tongue:

C’est pas si simple :stuck_out_tongue:

Regarde deja, ca : Carte PCI et bonne lecture…

Ha bah je suis content, j’étais pas si loin :stuck_out_tongue:

Après pour la complexité réelle liée aux signaux, les infos à faire exactement transiter, les zones à écrire/lire j’imagine que bluelambda est conscient du travail s’il se lance dans un projet comme celui-là.

Mais si on y regarde de plus prêt ce n’est pas si compliqué d’ailleurs. :stuck_out_tongue:

En tout cas, le document de jbemond donne un bon résumé, mais attention il manque quelques infos essentielles, notamment la méthode pour indiquer la taille des zones mémoires à mapper (enfin peut-être que si, je l’ai lu vite fait :P). De toute façon bluelambda je t’invite vraiment à mettre la main sur la norme officielle et complète avant de passer à la réalisation, sinon c’est le meilleur moyen de fabriquer une carte qui ne marche pas. :stuck_out_tongue:

Hello!

Tout d’abord merci pour toutes ces réponses :stuck_out_tongue:

Merlin >
Déjà je ne compte pas commercialiser ma carte B) Si j’arrive à la réaliser, ce sera déjà pas mal!
Au mieux, si ça fonctionne correctement j’en réaliserai deux ou trois.

Si tu mets la main sur une documentation PCI, même si c’est après noël, ça peut toujours m’intéresser.
Mais pourquoi ces specs seraient payantes? Le bus PCI est normalisé, les specs doivent sûrement être publiques je pense. D’ailleur il y a l’air d’y avoir pas mal de trucs dans le lien de jbemond.

[quote]Après pour la complexité réelle liée aux signaux, les infos à faire exactement transiter, les zones à écrire/lire j’imagine que bluelambda est conscient du travail s’il se lance dans un projet comme celui-là.[/quote]Je ne sais pas pour l’instant si j’en serai capable.
Jusqu’à présent je n’ai réalisé que des cartes sur bus ISA (notamment une pour gérer les feux d’un carrefour, et une autre, en cours de réalisation, permettant l’analyse des battements cardiaques).
Et comme à la fin de l’année nous devons réaliser un projet tutoré, ayant trouvé la réalisation de cartes ISA assez simple, je me suis dit qu’il serait intéressant d’étudier un peu le bus PCI (plus récent que l’ISA).

J’ai survolé la documentation postée par jbemond, et je pense qu’il y a pas mal de détails complexes que je peux ignorer pour ma carte.
Je verrai, je vais étudier tout ça pendant les vacances de noël, histoire de savoir si j’ai suffisament d’XP pour me lancer dans ce projet :stuck_out_tongue:

[quote]De toute façon bluelambda je t’invite vraiment à mettre la main sur la norme officielle et complète avant de passer à la réalisation, sinon c’est le meilleur moyen de fabriquer une carte qui ne marche pas.[/quote]Je vais chercher, si je la trouve je la poste.
Au pire, même si j’arrive pas à mener le projet à terme, l’essentiel est de prouver que j’ai fourni un travail. Les projets tutorés de l’an passé peu de monde les avaient terminés.
J’étais un des seuls à avoir fini en fait (aussi je m’étais pas foulé, j’avais réalisé avec mon binôme un simple fréquencemètre numérique, à coté des autres qui réalisaient par exemple des robots répondant aux sifflements de l’utilisateur :slight_smile:

jbemond
Merci pour le lien, ça va me faire de la lecture :stuck_out_tongue:

Aussi, je me suis renseigné auprès d’un de mes profs d’info. et il m’a dit, tout en me précisant qu’il n’était pas spécialiste du bus PCI, que théoriquement je peux donner une adresse fixe à ma carte.
Cependant, je préfère une solution propre, et je veux que ma carte marche sur tous les PC, sans aucun risque de conflit, et sans devoir fixer l’adresse avec des jumpers :wink:

Je vais commencer à étudier cette doc :stuck_out_tongue:

Bonne soirée, bye!

jbemond >
La documentation que tu as postée va vachement me servir je crois! C’est super, exactement le style de doc que je cherchais.

J’y ai trouvé des réponses à la plupart de mes intérogations, notamment en ce qui concerne l’attribution des adresses pour la carte et la recherche de la carte par le driver.
Les fonctions comme find_pci_device() sont présentes sous Linux.
Il y a même un exemple de programme commenté qui me permettra peut être de comprendre un peu comment faire un driver Windows (plus tard, pour le projet je me limite à un driver Linux, étant donné que je ne sais pas du tout comment procéder sous Windows).

Je vais encore étudier tout ça, mais je pense à première vue (et j’espère) que c’est à ma portée. Ca va me demander du travail, c’est clair, mais rien ne m’empêche de m’y prendre à l’avance. Surtout que c’est un sujet vachement intéressant, donc je suis motivé :stuck_out_tongue:

De plus la carte réalisée comme exemple est assez complexe (par exemple, c’est une carte 8 couches, je n’ai jamais fait plus que du double face).
Je ne sais pas exactement, mais je pense que je peux me passer de nombreux signaux, sans compter que ma réalisation au niveau électronique ne nécessitera que peu de composants, et aucun trop complexe.
En fait le plus gros de ma carte serait la partie qui communiquerai avec le bios pour les adresses et tout je pense :stuck_out_tongue:

Je vais aussi jeter un coup d’oeil à la Bible du PC que mon père a achetée récemment.

Par contre les composants que je vais certainement utiliser sont du TTL. Alimentés en 5v.
Le PCI 3.0 ne dispose plus du 5v à ce que j’ai compris.
J’ai consulté le manuel de ma carte mère pour me faire une idée, et ils ne précisent pas quelle version de PCI est utilisée.
Qu’en est-il? Comment savoir si ma carte mère, où celle du PC de tests que je compte utiliser, possède du PCI 3.0 ou pas?

J’ai fait d’autres recherches, et j’ai trouvé ça (je n’ai jeté qu’un rapide coup d’oeil pour l’instant):
diverses spécifications de bus (PCI, AGP, PCI-Express)
Merlin, tu avais raison, exemple de site qui vend des spécifications PCI
Brochage
Diverses infos

Welcome to the real world…

Wikipedia me dit que les specs sont dispos sur http://www.pcisig.com

J’ai lu en diagonale, mais apparemment tu peux les télécharger en devenant membre (c’est seulement 3000 $ par an) ou bien en acheter une au détail.

Oui j’ai vu, j’ai d’ailleurs posté le lien dans mon précédent message.

De toutes façons je n’ai pas l’intention d’acheter une doc payante. Sans compter qu’une doc payante s’adresse certainement à des professionnels, et pas à un étudiant qui réalise une carte qui exploitai même pas 5% des possibilités offertes par le bus PCI.

Donc c’est réglé, je me contenterai des specs publiques que je trouve. Et si ça suffit pas je changerai de projet c’est tout :stuck_out_tongue:

EDIT: à la limite si vous cherchez de la doc payante sur le PCI, il y a moins cher que sur pcisig.
http://www.amazon.fr/exec/obidos/ASIN/0201…3586704-6001843
Ce livre est en anglais.
Par contre niveau contenu je sais pas, si il est à la FNAC ou Cultura il suffit de jeter un coup d’oeil.

Je ne pense pas qu’un bouquin pareil me soit utile :stuck_out_tongue: