Bonjour à tous

Dans le petit croquis suivant j'essaie d'afficher une image BMP ( plan.bmp)
sur un écran de type TFT ILI9488 450 x 320 muni d'un lecteur de carte SD

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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
 
#include <WiFi.h>
#include <TFT_eSPI.h>
#include <FS.h>
#include <SPI.h>
#include <SD.h>
 
TFT_eSPI tft = TFT_eSPI();
 
// Paramètres SD
#define SD_MOSI 23
#define SD_MISO 19
#define SD_SCK 18
#define SD_CS 5
 
SPIClass SD_SPI;
 
 
 
void setup() {
  Serial.begin(115200);
  SD_SPI.begin(SD_SCK, SD_MISO, SD_MOSI);
 
 
  // Initialisation écran
 
  tft.init();
  tft.setRotation(1);
  tft.fillScreen(TFT_BLACK);
 
 
 
  if (!SD.begin(SD_CS, SD_SPI, 40000000))
  {
    Serial.println("Montage carte échoué");
    return ;
  }
 
  uint64_t cardSize = SD.cardSize() / (1024 * 1024);
  Serial.printf("Taille de la carte SD : %lluMB\n", cardSize);
  listDir(SD, "/", 0);
 
  showBMP("plan.bmp", 0, 0);
  delay(3000);
 
}
 
void loop() {
 
}
 
void listDir(fs::FS &fs, const char * dirname, uint8_t levels){
  Serial.printf("Contenu du répertoire : %s\n", dirname);
 
  File root = fs.open(dirname);
  if(!root){
    Serial.println("Impossible d'ouvrir le répertoire");
    return;
  }
  if(!root.isDirectory()){
    Serial.println("Ce n'est pas un répertoire");
    return;
  }
 
  File file = root.openNextFile();
  while(file){
    if(file.isDirectory()){
      Serial.print("  DIR : ");
      Serial.println(file.name());
      if(levels){
        listDir(fs, file.name(), levels -1);
      }
    } else {
      Serial.print("  FICHIER: ");
      Serial.print(file.name());
      Serial.print("  TAILLE: ");
      Serial.println(file.size());
    }
    file = root.openNextFile();
  }
}
 
 
 
void showBMP(const char *filename, int16_t x, int16_t y) {
  File bmpFile;
  int16_t w, h;
  uint8_t r, g, b;
 
  if ((x >= tft.width()) || (y >= tft.height())) return;
 
  bmpFile = SD.open(filename);
 
  if (!bmpFile) {
    Serial.println("Erreur ouverture BMP !");
    return;
  }
 
 
  // Lire l’en-tête du BMP
  if (read16(bmpFile) == 0x4D42) {
    read32(bmpFile); // taille fichier
    read32(bmpFile); // réservé
    uint32_t offset = read32(bmpFile);
    read32(bmpFile); // taille header
    w = read32(bmpFile);
    h = read32(bmpFile);
    read16(bmpFile); // plans
    uint16_t depth = read16(bmpFile);
    read32(bmpFile); // compression
 
    if (depth == 24) {
      bmpFile.seek(offset);
      uint8_t sdbuffer[3 * 20];
      for (int row = 0; row < h; row++) {
        bmpFile.read(sdbuffer, 3 * w);
        for (int col = 0; col < w; col++) {
          b = sdbuffer[col * 3];
          g = sdbuffer[col * 3 + 1];
          r = sdbuffer[col * 3 + 2];
          tft.drawPixel(x + col, y + (h - row - 1), tft.color565(r, g, b));
        }
      }
    }
  }
  bmpFile.close();
}
 
// Fonctions utilitaires BMP
uint16_t read16(File &f) {
  uint16_t result;
  ((uint8_t *)&result)[0] = f.read();
  ((uint8_t *)&result)[1] = f.read();
  return result;
}
uint32_t read32(File &f) {
  uint32_t result;
  ((uint8_t *)&result)[0] = f.read();
  ((uint8_t *)&result)[1] = f.read();
  ((uint8_t *)&result)[2] = f.read();
  ((uint8_t *)&result)[3] = f.read();
  return result;
}

si j'active le TFT pour lire mon fichier , il repond : Montage carte échoué

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0030,len:4980
load:0x40078000,len:16612
load:0x40080400,len:3480
entry 0x400805b4
Montage carte échoué   <======
si j'inhibe la librairie TFT , il lit la carte SD et il répond :
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
 
rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0030,len:4980
load:0x40078000,len:16612
load:0x40080400,len:3480
entry 0x400805b4
Taille de la carte SD : 1922MB
Contenu du répertoire : /
  DIR : System Volume Information
  FICHIER: plan.bmp  TAILLE: 360026        <======
  FICHIER: Mouse480.jpg  TAILLE: 6609
  FICHIER: Baboon40.jpg  TAILLE: 24384
  FICHIER: EagleEye.jpg  TAILLE: 20838
  FICHIER: lena20k.jpg  TAILLE: 19414
  DIR : SD
aurai-je un problème de conflit SPI ?