Важная информация

User Tag List

Показано с 1 по 5 из 5

Тема: Алгоритм и тайминги прошивки EEPROM (Flash)

  1. #1
    Guru Аватар для newart
    Регистрация
    19.01.2005
    Адрес
    Санкт-Петербург
    Сообщений
    11,439
    Спасибо Благодарностей отдано 
    192
    Спасибо Благодарностей получено 
    145
    Поблагодарили
    61 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Алгоритм и тайминги прошивки EEPROM (Flash)

    Имею отладочную плату STM32F4 Discovery


    К ней припаяна панелька для EEPROM. Процесс прошивки работает очень странно, например в AT29C010 прошивка происходит только если прошиваю первые 4 сектора. Если больше то процесс прошивки не происходит.

    В плане алгоритма прошивки это вроде самые простые флешки. То есть не надо никаких кодов записи отсылать.
    Вероятно где-то косяк с таймингами.
    Если все верно понял, нужно слать данные одного сектора, в этом процесс может проходить почти без задержек.
    Потом нужно выждать некоторое время что флешка из буфера успела записать данные в память.
    И так пройтись по всем секторам. Экспериментально установить нужную задержку не получилось, а с указаной в даташите работает как-то не так.

    В чем может быть проблема?

    Вот так выглядит попытка прошивать https://dl.dropboxusercontent.com/u/6439155/1%230.ORI
    Я пробовал писать сплошные числа, 01,03,170 итп. Видно что их раскидало по памяти как-то не понятно.




    Вот исходник:

    Код:
    	SET_DATA_MODE_OUT
    
    	uint16_t sector = 0;
    	uint16_t byte = 0;
    	uint16_t addr = 0;
    	uint8_t d = 1;
            uint8_t data = 0;
    
    	OE_HIGH;
    	CE_HIGH;
    	WE_HIGH;
    
    	Delay(0xfffff);
    
        for (sector=0; sector<256; sector++) {
    
            for (byte=0; byte<128; byte++) {
    
            	addr = (sector << 7 ) | byte;
            	data = rom_gb[addr];
    
            	OE_HIGH;
    
            	ADDR_OUT = addr;
    
            	WE_LOW;
    
            	DATA_OUT = (uint16_t)data << 8;
    
            	Delay(d);
    
            	WE_HIGH;
            	OE_LOW;
    
            	Delay(d);
    
            }
    
            Delay(300);
    
        }
    Функция Delay дает задержку в uS. То есть 300 это примерно 200 uS.

    Полинг не использую, так-как не очень понял как это правильно делать.

    Посмотрел в сорцах к Wylliam програмеру, там задержка между секорами 17ms. У меня же при больших задержках запись похоже вообще не происходит. Ну то есть скали скажем выставить ее в 1 секунду.

    Denn поделился своим опытом с неэкранированым кабелем, но я думаю дело не в этом. В инете похожие схемы выглядят еще более страшно и витьевато чем у меня и ведь работают.


    Где искать подвох? Ну или сорцы с записью 29 серии? В сорцах к Wylliam есть только 27 и 28.

    ---------- Post added at 18:59 ---------- Previous post was at 18:57 ----------

    Дело осложняетс тем что я не могу на комп считать данные и проконтролировать то что записал.

    ---------- Post added at 19:03 ---------- Previous post was at 18:59 ----------

    Изначально код был такой:

    PHP код:

    for (byte=0byte<128byte++) {

                
    addr = (sector << ) | byte;
                
    data rom_gb[addr];

                
    OE_HIGH;

                
    ADDR_OUT addr;

                    
    CE_LOW;
                
    WE_LOW;

                
    DATA_OUT = (uint16_t)data << 8;

                
    Delay(d);

                
    WE_HIGH;
                
    CE_HIGH;

                
    Delay(d);

            } 
    Даташиты

    http://www.soselectronic.cz/a_info/r.../AT29C010A.pdf

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2
    Guru Аватар для HardWareMan
    Регистрация
    26.02.2011
    Адрес
    г. Павлодар, Казахстан
    Сообщений
    4,404
    Спасибо Благодарностей отдано 
    318
    Спасибо Благодарностей получено 
    596
    Поблагодарили
    442 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    1. Плешка 5В, контроллер 3.3В. Где преобразователи уровня?
    2. Плешка JEDEC, для записи требуются определенные телодвижения, где они в коде?

  4. #3
    Guru Аватар для newart
    Регистрация
    19.01.2005
    Адрес
    Санкт-Петербург
    Сообщений
    11,439
    Спасибо Благодарностей отдано 
    192
    Спасибо Благодарностей получено 
    145
    Поблагодарили
    61 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от HardWareMan Посмотреть сообщение
    1. Плешка 5В, контроллер 3.3В. Где преобразователи уровня?
    Дак по идее ей как и SRAM и всему прочему хватает этих 3.3 вольта чтобы воспринять их за HIGH.

    2. Плешка JEDEC, для записи требуются определенные телодвижения, где они в коде?
    Какие? Что это значит?

  5. #4
    Guru Аватар для HardWareMan
    Регистрация
    26.02.2011
    Адрес
    г. Павлодар, Казахстан
    Сообщений
    4,404
    Спасибо Благодарностей отдано 
    318
    Спасибо Благодарностей получено 
    596
    Поблагодарили
    442 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Например, вот:

    Если не разблокировать запись - ничего не запишется. А если не заблокировать - стерётся.

  6. #5
    Guru Аватар для Denn
    Регистрация
    04.05.2006
    Адрес
    St.-Petersburg
    Сообщений
    2,220
    Спасибо Благодарностей отдано 
    473
    Спасибо Благодарностей получено 
    899
    Поблагодарили
    591 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Советую обратить внимание на толщину GND по пути к ПЗУхе. Когда много сигнальных шин находятся в лог."1", то суммарная толщина плюсового потенциала, подводимого к ПЗУ многократно превышает толщину общего провода. В момент перезаряда паразитных ёмкостей ПЗУ с уровнем лог."0" может твориться чёрте что.
    Критиковать - значит объяснять автору, что он делает не так, как делал бы я, если бы умел

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Тайминги Pentagon 128 :)
    от ZXMAK в разделе Эмуляторы
    Ответов: 97
    Последнее: 13.11.2017, 11:23
  2. Ответов: 3
    Последнее: 04.06.2012, 14:51
  3. Куплю микросхемы EEPROM
    от DrPass в разделе Барахолка (архив)
    Ответов: 3
    Последнее: 18.02.2012, 00:41
  4. старые программаторы eeprom и logic
    от Orionsoft в разделе Оборудование
    Ответов: 1
    Последнее: 10.02.2012, 09:49
  5. Тайминги DENDY
    от evgs в разделе Nintendo
    Ответов: 7
    Последнее: 01.11.2011, 22:59

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •