|
Прошивка флэш-памяти, есть проблемы... |
|
|
|
 |
Ответов
|
Jun 28 2007, 10:43
|

инопланетянин
  
Группа: Свой
Сообщений: 236
Регистрация: 24-12-06
Из: Питер
Пользователь №: 23 832

|
Цитата(rezident @ Jun 28 2007, 11:57)  Вместо 0x555 вам нужно делать обращение по адресу 0xAAA. Соответственно адрес 0xAAA во втором цикле заменяется на 0x1554. Только проверьте правильность подключения этой Flash в вашем устройстве при 16-битном доступе. Адресная линия A0 вашего CPU не должна подключаться к Flash. A1 CPU должна подключаться к A0 Flash, A2 CPU к A1 Flash, A3 CPU к A2 Flash и т.д. Да, у меня присутствует схемотехническая огреха. Все адресные ноги соеденены напрямую A0 - A0 , A1 - A1 ...  Какие есть предложения по разрешению ситуации? Если я переведу шину проца в байтовый режим, ножка A0_cpu будет функционировать (смогу я записывать по нечетным адресам)? Может использовать -BHE_cpu - (A-1)_flash? Как лучше поступить?
|
|
|
|
|
Jul 4 2007, 11:53
|

инопланетянин
  
Группа: Свой
Сообщений: 236
Регистрация: 24-12-06
Из: Питер
Пользователь №: 23 832

|
Флэшка по-прежнему молчит! Обрисую полную картину: Ножки процессора соединены с ножками памяти напрямую, т.е. A0-A0, A1-A1 ... A20-A20. Флэш жестко подтянута в режим WORD. При работе шины в WORD режиме, не используется A0(только четные адреса) => никак не выставить требуемый адресс 0x555  При работе шины в BYTE режиме, происходит последовательно 2 цикла шины LOW(A0=0), затем High(A0=1)(0x555 выставить можно) Но мне кажется, что во время последовательности команд програмирования, другие команды(LOW) вставлять нельзя, иначе собъется цикл, может я неправ! Какие есть предложения по вопросу,без электрических доработок?
|
|
|
|
|
Jul 4 2007, 13:41
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
При таком подключении: Цитата(Legotron @ Jul 4 2007, 15:53)  Ножки процессора соединены с ножками памяти напрямую, т.е. A0-A0, A1-A1 ... A20-A20. Флэш жестко подтянута в режим WORD. Вы должны жестко подтянуть флеш в режим BYTE, и дальше работать с байтовыми командами по соответствующим адресам(0x555, и т.д.) Пример (Am29LV040B): Код // типы для работы с flash (подключение по 8 бит шине) typedef volatile unsigned char TDATA; typedef volatile unsigned char *PTDATA;
// макросы записи и чтения flash #define FLASH_WRITE(p, d) (*((PTDATA)p) = d) #define FLASH_READ(p) (*((PTDATA)p))
........................... FLASH_WRITE(FLASH_BASE, 0xF0); // команда Reset
FLASH_WRITE(FLASH_BASE+0x555, 0xAA); // переходим в Autoselect FLASH_WRITE(FLASH_BASE+0x2AA, 0x55); FLASH_WRITE(FLASH_BASE+0x555, 0x90);
mId=FLASH_READ(FLASH_BASE) // читаем Manufacturer ID ..........................................
|
|
|
|
|
Jul 5 2007, 05:19
|

инопланетянин
  
Группа: Свой
Сообщений: 236
Регистрация: 24-12-06
Из: Питер
Пользователь №: 23 832

|
Цитата(singlskv @ Jul 4 2007, 17:41)  Код FLASH_WRITE(FLASH_BASE+0x555, 0xAA); // переходим в Autoselect Какой у вас процессор? Мне процессор Infineon XC167не дает возможность обращаться таким образом по нечетным адресам(0x555) при любой конфигурации шины. Другое дело, что в байтовом режиме шины от 1 команды идет 2 цикла записи (1-A0=0 2-A0=1, остальные разряды адресса не изменяются) .
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|