Walczę od paru dni z komunikowaniem się LPC4088 z pamięcia nor flash S29GL064.
Linie adresowe użyte do komunikacji to P4.1 - P4.22, czyli 21 linii podłączonych odpowiednio do linii adresowych A0 - A21 pamięci S29GL064.
Co prawda mam przykładowy kod źródłowy, który działa pod Keil lecz pod arm-none-eabi-gcc brak komunikacji z pamięcią.
Jak zdołałem się zorientować ze schematu makro jest potrzebne na przesunięcie adresu ponieważ do linii adresowej A0 pamięci flash podpięta jest linia adresowa A1 (P4.1) LPC4088.
Rozumiem, że odwołując się do adresu 0x90000001 kontroler EMC ustawi stan wysoki na P4.0, a ponieważ P4.0 nie jest podłączone do pamięci flash na jej liniach adresowych będzię nadal adres 0. Dlatego każdy adres należy pomnożyć przez 2. Poprawny tok myślenia ?
Pola zmiennej NOR_ID zawsze po odczycie mają wartość 65535. Oczywiście jak ten program skompiluje pod Keil poprawnie odzczytuje dane zaszyte w pamięci flash.
Funkcja dokonująca konfiguracji kontrolera pamięci jest funkcją biblioteczną od NXP i wygląda tak:
Ktoś domyśla się gdzie leży problem ?
Linie adresowe użyte do komunikacji to P4.1 - P4.22, czyli 21 linii podłączonych odpowiednio do linii adresowych A0 - A21 pamięci S29GL064.
Co prawda mam przykładowy kod źródłowy, który działa pod Keil lecz pod arm-none-eabi-gcc brak komunikacji z pamięcią.
Kod: C / C++
Jak zdołałem się zorientować ze schematu makro
#define ADDR_SHIFT(A) (NOR_FLASH_START_ADDR + (2 * (A)))Rozumiem, że odwołując się do adresu 0x90000001 kontroler EMC ustawi stan wysoki na P4.0, a ponieważ P4.0 nie jest podłączone do pamięci flash na jej liniach adresowych będzię nadal adres 0. Dlatego każdy adres należy pomnożyć przez 2. Poprawny tok myślenia ?
Pola zmiennej NOR_ID zawsze po odczycie mają wartość 65535. Oczywiście jak ten program skompiluje pod Keil poprawnie odzczytuje dane zaszyte w pamięci flash.
Funkcja dokonująca konfiguracji kontrolera pamięci jest funkcją biblioteczną od NXP i wygląda tak:
Kod: C / C++
Ktoś domyśla się gdzie leży problem ?