Hallihallohallöle!
Habe mit folgender Schleife Zeitmessungen gemacht, wie lange es braucht,
bis das externe SD-Ram komplett beschrieben wurde:
1 | uint32_t a = GetTick();
|
2 | for (int i = 0; i < SDRAM_SIZE; i += 4)
|
3 | {
|
4 | // 501ms -> 16.743.729b/s
|
5 | //*(uint8_t*)(0xD0000000 + i) = 0xBB;
|
6 | //*(uint8_t*)(0xD0000000 + i + 1) = 0xBB;
|
7 | //*(uint8_t*)(0xD0000000 + i + 2) = 0xBB;
|
8 | //*(uint8_t*)(0xD0000000 + i + 3) = 0xBB;
|
9 |
|
10 | // 314ms -> 26.715.312b/s
|
11 | //*(uint16_t*)(0xD0000000 + i) = 0xBBBB;
|
12 | //*(uint16_t*)(0xD0000000 + i + 2) = 0xBBBB;
|
13 |
|
14 | // 233 ms -> 36.002.609b/s
|
15 | //*(uint32_t*)(0xD0000000 + i) = 0xBBBBBBBB;
|
16 |
|
17 | // 407 ms -> 20.610.830b/s
|
18 | //*(uint16_t*)(0xD0000000 + i) = 0xBBBB;
|
19 | //*(uint8_t*)(0xD0000000 + i + 2) = 0xBB;
|
20 | //*(uint8_t*)(0xD0000000 + i + 3) = 0xBB;
|
21 | }
|
22 | uint32_t b = GetTick() - a;
|
Es handelt sich um den STM32F429IGT6 µC auf einem Waveshare-Core-Board
mit 8MB SD-Ram. Ansich sind die Werte ja plausibel (?), was mich
wundert, ist die Geschwindigkeit, wenn ich mit 32bit schreibe. Der
Speicher ist doch elektrisch nur mit 16bit angebunden, also muss er doch
zwei Schreiboperationen ausführen.
Kann mir jemand eine Erklärung hierfür liefern? Ich würde auch gerne ein
paar Zeilen lesen, wenn ihr einen guten Link für mich habt. Vor allem
würde mich interessieren, wie ich das beste, in Bezug auf das Tempo, aus
dem Speicher heraushole. Die Größe spielt für mich keine Rolle, ich
komme auch mit 2MB aus.
Grüße
Reggie