Gast
#4450020
Hallo allerseits, ich habe eine kleine Kamera Demo Plattform für den MT9D111-Sensor von Aptina auf einem STM32F7-discovery Board entwickelt. Ich habe mich dabei an die Beispiele aus der HAL-Library von ST gehalten. Der Datenfluss für die Preview ist wie folgt: DCMI-Interface -> DMA -> Frame Ringbuffer im SDRAM (0xC0260000). Nach jeder übertragenen Zeile gibt es ein Interrupt, wo dann der DMA2D benutzt wird, um die Zeile von RGB565 in ARGB8888 zu wandeln und in den Display Buffer (0xC0130000) zu kopieren. Außerdem habe ich eine Fotofunktion implementiert, bei der ein Bild mit höherer Auflösung (VGA) in einen weiteren Bereich des SDRAMs (0xC0390000) gepeichert wird. Dieses Bild kann auch wieder über den DMA2D in den LCD Framebuffer kopiert werden, damit man es sich ansehen kann. Das funktioniert alles wunderbar, daher nun zum eigentlichen Problem: Ich möchte nun ein Bild aus der Fotofunktion als Bitmap auf einer FAT formatierten SD-Karte speichern, um es mir am PC anzugucken. Hier der Code dafür:
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 | |
Kurze Erklärung dazu: Ich hole immer eine Zeile des Bildes via DMA2D aus dem SDRAM und speichere sie im onchip SRAM. Pixel Format Conversion ist hier nicht notwendig, da der BMP-Header entsprechend angepasst ist (alles RGB565, 2Byte/pixel). *Nun bekomme ich aber offensichtlich nicht die richtigen bzw. unvollständige Daten aus dem SDRAM. Das BMP sieht aus wie im Anhang.* Teilweise sind schon Bilddaten zu sehen, aber was mich am meisten verwundert sind die schwarzen Balken. Diese kommen daher, dass ich den Zeilenpuffer im SRAM vor der DMA2D-Aktion mit Nullen beschreiben. Nach meinem Verständnis sollten die aber später alle wieder überschrieben werden. Habt ihr vielleicht eine Ahnung, wo der Fehler liegen könnte? Ich stehe gerade echt auf dem Schlauch, vor allem da zwei ähnliche Funktionen ohne Probleme funtionieren.


