IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Matériel Discussion :

Communication via bus pc/104


Sujet :

Matériel

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 5
    Points : 4
    Points
    4
    Par défaut Communication via bus pc/104
    Bonjour,

    cela fait quelques jours que je fouille internet pour trouver de la documentation sur "Comment communiquer via le bus PC/104 de ma carte embarquée.

    J'ai donc une carte TS-7260 avec linux embarqué et j'ai branché dessus un module GPS grâce au port pc/104.

    J'arrive à écrire des programmes en C qui s'exécute sur mon système embarqué mais je n'arrive pas à accéder à mon module pc/104 que j'ai pluggé dessus.

    le seul type de commande que j'ai trouvé est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    unsigned char *start;
    unsigned long val;
    int fd = open("/dev/mem", O_RDWR|O_SYNC);
     
    start = (char *)mmap(0, 4096, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0x21E003E8);
    mais je ne sais pas trop comment l'exploité

    Si quelqu'un pourrait me mettre sur une piste, ce serait super

    Merci d'avance

  2. #2
    Membre averti

    Inscrit en
    Juillet 2008
    Messages
    186
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 186
    Points : 350
    Points
    350
    Par défaut
    Bonjour,

    Cet appel à mmap retourne un pointeur qui peut être utilisé pour aller lire et écrire dans les zones qui ont été mappées. Dans le cas présent, il s'agit de la mémoire physique, à l'adresse 0x21E003E8 et dans une fenêtre de 4096 octets.

    Par exemple, à la suite des appels précédents (si aucune erreur n'est survenue), l'expression start[0] = 0; va aller écrire un octet de valeur 0 à l'adresse physique 0x21E003E8. De même, char val = start[1]; va aller lire l'octet à l'adresse physique 0x21E003E9;

    En dehors de ces généralités, TS-7260, PC/104, je ne connais pas.

    Didier

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Merci pour la réponse.

    J'ai donc rajouté ce bout de code pour afficher les valeurs de la plage mémoire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    for (compteur = 0 ; compteur < 10 ; compteur++)
       {
           char val = start[compteur];
           printf("%c",val);
       }
    Mais j'obtiens un "Segmentation fault" lors de l'exécution de cette boucle

  4. #4
    Membre averti

    Inscrit en
    Juillet 2008
    Messages
    186
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 186
    Points : 350
    Points
    350
    Par défaut
    Bonjour,

    As-tu bien vérifié la valeur de retour de open ? Celle de mmap ? Est-ce que l'adresse mémoire physique 0x21E003E8 est vraiment celle qu'il faut utiliser ?

    Didier

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Bonjour,

    J'ai bien vérifié chaque étape (mmap, open) et elles se déroulent sans problème.
    J'ai essayé 4 adresses différentes que j'avais pour accéder au pc/104 :

    - 0x21E003E8
    - 0x21A003E8
    - 0x11E003E8
    - 0x11A003E8

    mon module pc/104 est configuré pour émettre sur le COM3, c'est pour cela que les 4 derniers chiffres sont "03E8".

    Les plages d'adresses complète sont :

    - 11E0_0000 -> 11E0_03FF 8 bits I/O cycles
    - 21E0_0000 -> 21E0_03FE 16 bits I/O cycles
    - 11A0_0000 -> 11AF_FFFF 8 bit Memory cycles
    - 21A0_0000 -> 21AF_FFFE 16 bit Memory cycles

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2006
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Bonjour,

    Je connais un peu cette carte, est-ce que le problème est résolu ?

    Tu parles d'une carte PC104 puis d'un port série, c'est complètement différent !

    Un accès à n'importe quel adresse se fait avec mmap&co, voir les exemples pour les entrées-sorties disponibles sur le ftp de technologic.

    Par contre un port série (si tu utilises une carte type TS-SER1) a besoin de drivers, qui sont en principe inclus. Il faut juste trouver le bon device (tty...) à utiliser.
    voir pages 43 et 44 du manuel...

    http://www.embeddedarm.com/products/...roduct=TS-7260

    Romain.

Discussions similaires

  1. programme en java qui fait la communication via modbus
    Par maximus_yassine dans le forum Langage
    Réponses: 1
    Dernier message: 29/02/2008, 15h16
  2. communication via USB
    Par archer dans le forum C++
    Réponses: 0
    Dernier message: 10/01/2008, 10h59
  3. Process : Communication via les streams
    Par AnKhCHFR dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 19/06/2006, 15h25
  4. python & flash : communication via socket -> Null byt
    Par arcane14 dans le forum Réseau/Web
    Réponses: 3
    Dernier message: 30/01/2006, 21h19
  5. [LG] Communication via modem
    Par tomsteak dans le forum Langage
    Réponses: 1
    Dernier message: 27/01/2006, 12h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo