Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Прошивка флэш-памяти
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему
Legotron
Добрый день!

У меня возникла проблема с прошивкой флэш-памяти Atmel AT49BV322DT.
Алгоритм прошивки представляет собой определенную последовательность обращений по шине.
Среди них есть запись данных по адресу 0х555! У меня 16-разрядный процессор и режим у флэшки и на шине выбран WORD. Я не могу обращаться по нечетным адресам (возникает TRAP). Могу ли я заменить 0х555 на 0х554? Или флэшке четко необходима 1 в младшем разряде адреса?
Подскажите пожалуйста!

Спасибо.
rezident
Вместо 0x555 вам нужно делать обращение по адресу 0xAAA. Соответственно адрес 0xAAA во втором цикле заменяется на 0x1554. Только проверьте правильность подключения этой Flash в вашем устройстве при 16-битном доступе. Адресная линия A0 вашего CPU не должна подключаться к Flash. A1 CPU должна подключаться к A0 Flash, A2 CPU к A1 Flash, A3 CPU к A2 Flash и т.д.
Legotron
Цитата(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 ... sad.gif
Какие есть предложения по разрешению ситуации?
Если я переведу шину проца в байтовый режим, ножка A0_cpu будет функционировать (смогу я записывать по нечетным адресам)?
Может использовать -BHE_cpu - (A-1)_flash?
Как лучше поступить?
rezident
Цитата(Legotron @ Jun 28 2007, 16:43) *
Как лучше поступить?

Вы не указали тип вашего CPU и поэтому я ничего не знаю про его "байтовый режим шины".
Legotron
Цитата(rezident @ Jun 28 2007, 16:33) *
Вы не указали тип вашего CPU и поэтому я ничего не знаю про его "байтовый режим шины".

Процессор Infineon XC167.
Нажмите для просмотра прикрепленного файла
rezident
Цитата(Legotron @ Jun 29 2007, 02:49) *
Процессор Infineon XC167.

Цитата(Legotron)
Если я переведу шину проца в байтовый режим, ножка A0_cpu будет функционировать (смогу я записывать по нечетным адресам)?

Досконально в 400 с лишним страниц мануала я не вникал, но похоже что можно.
Legotron
Флэшка по-прежнему молчит!

Обрисую полную картину:

Ножки процессора соединены с ножками памяти напрямую, т.е. A0-A0, A1-A1 ... A20-A20.
Флэш жестко подтянута в режим WORD.

При работе шины в WORD режиме, не используется A0(только четные адреса) => никак не выставить требуемый адресс 0x555 sad.gif
При работе шины в BYTE режиме, происходит последовательно 2 цикла шины LOW(A0=0), затем High(A0=1)(0x555 выставить можно)
Но мне кажется, что во время последовательности команд програмирования, другие команды(LOW) вставлять нельзя, иначе собъется цикл, может я неправ!

Какие есть предложения по вопросу,без электрических доработок?
singlskv
При таком подключении:
Цитата(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
..........................................
Legotron
Цитата(singlskv @ Jul 4 2007, 17:41) *
Код
  FLASH_WRITE(FLASH_BASE+0x555, 0xAA);                 // переходим в Autoselect

Какой у вас процессор?

Мне процессор Infineon XC167не дает возможность обращаться таким образом по нечетным адресам(0x555) при любой конфигурации шины.
Другое дело, что в байтовом режиме шины от 1 команды идет 2 цикла записи (1-A0=0 2-A0=1, остальные разряды адресса не изменяются) .
rezident
Цитата(Legotron @ Jul 5 2007, 11:19) *
Другое дело, что в байтовом режиме шины от 1 команды идет 2 цикла записи (1-A0=0 2-A0=1, остальные разряды адресса не изменяются) .

Придется ставить дешифратор и "вырезать" второе обращение к Flash.
singlskv
Цитата(Legotron @ Jul 5 2007, 09:19) *
Какой у вас процессор?
Renesas SuperH
Цитата
Мне процессор Infineon XC167не дает возможность обращаться таким образом по нечетным адресам(0x555) при любой конфигурации шины.

в даташите на Ваш проц написано:
Bytes are stored at even or odd byte addresses. Words are stored in ascending memory
locations with the low byte at an even byte address being followed by the high byte at
the next odd byte address.

Цитата
Другое дело, что в байтовом режиме шины от 1 команды идет 2 цикла записи (1-A0=0 2-A0=1, остальные разряды адресса не изменяются) .

откуда 2 цикла при чтении/записи 1 байта ?

У Вас выбран вот этот режим работы шины:
16 … 24-bit Addresses, 8-bit Data, Demultiplexed ???

флеш переключен в байтовый режим работы ?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.