Bonjour à tous,

voilà, je suis étudiant en électronique et je dois réaliser une communication en SPI avec un écran LCD tactile : eDIPTFT43 (Datasheet).

J'ai actuellement essayé d'envoyé une ligne de code simple en c grâce à mon microcontroleur C8051F320. les configuration d'initialisation du SPI :
- mode maître
- clock = 100 KHz
- clock au repos à '0' et actif sur le flanc montant
- mode 4 fils en maître unique
- état de départ du NSS : '1'

J'ai donc branché l'écran en tant que tel :
pin 6-9 à mon micro (miso, mosi, clk, ss)
pin 5 : reset au +5
pin 10 : à la masse, MSB first
pin 11 : à la masse, SPI mode
pin 14 : à la masse, clk au repos à 0
pin 15 : à la masse, actif sur le flanc montant

le reste n'as pas besoin d'être connecté pour mon utilisation.

voici le code que j'utilise pour écrire et recevoir :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
void Write_LCD (unsigned char *donnee, unsigned char longueur)
{
   unsigned char bcc, i;
 
   NSSMD0 = 0;          // NSS utilisé comme commande du CS
 
// WRITE _____________________________________________________
   while (!TXBMT);         // attente buffer vide
   SPI0DAT = DC1;          // envoi DC1 (buffer d'envoie)
   while (!SPIF);          // attente de la fin de l'envoi
   SPIF = 0;               // reset flag
   bcc = DC1;
 
   while (!TXBMT);         // attente buffer vide
   SPI0DAT = longueur;     // envoi la longueur des data
   while (!SPIF);          // attente de la fin de l'envoi
   SPIF = 0;               // reset flag
   bcc = bcc + longueur;
 
   for (i=0; i < longueur; i++)
   {
      while (!TXBMT);         // attente buffer vide
      SPI0DAT = donnee[i];    // envoi des donnée
      while (!SPIF);          // attente de la fin de l'envoi
      SPIF = 0;               // reset flag
      bcc = bcc+donnee[i];
   } 
 
   while (!TXBMT);         // attente buffer vide
   SPI0DAT = bcc;          // envoi du BCC
   while (!SPIF);          // attente de la fin de l'envoi
   SPIF = 0;               // reset flag 
 
   while (!TXBMT);         // attente buffer vide
   SPI0DAT = 0x00;         // envoi rien, juste pour la lecture
   while (!SPIF);          // attente de la fin de l'envoi
   SPIF = 0;               // reset flag
 
   NSSMD0 = 1;          // NSS utilisé comme commande du CS
la transmission se fait très bien, j'arrive à lire ma commande grâce à l'oscilloscope, MAIS je ne recois jamais de bonne réponse de la port de mon slave.

Oscillograme :
http://www.hostingpics.net/viewer.ph...377scope10.png
sd : donnée série qui sont lue, ma trame de commande
d0 : CLK
d1 : MOSI
d2 : MISO
3 : SS

Le miso devrait me renvoyé le caractère x06 à la fin de la trame(ACK), mais il envoit des chose aléatoire tous le temps...

je sais plus trop quoi faire, j'ai peut-être loopé quelque chose, merci si vous arrivez à m'aider, cela ne doit pas être évident ^^. Bonne journée.