|
|
  |
Кто работал с памятью at45db161d или в принципе с at45dbxxxd, пожалуйста подскажите, Проблемы с at45db161d и их решение |
|
|
|
Sep 23 2007, 20:32
|
Профессионал
    
Группа: Свой
Сообщений: 1 266
Регистрация: 22-04-05
Из: Киев
Пользователь №: 4 387

|
 )) MISO - Master Input Slave Output MOSI - Master Output Slave Input Посмотрите AN AVR252, AN AVR107 - может, чем поможет ЗЫ. Ещё раз - не читайте всякой фигни (курс забаненного здесь кое-кого). Проблемы оттуда.
--------------------
aka Vit
|
|
|
|
|
Sep 23 2007, 20:59
|

Участник

Группа: Участник
Сообщений: 47
Регистрация: 22-08-07
Пользователь №: 29 980

|
Цитата(sensor_ua @ Sep 24 2007, 00:32)   )) MISO - Master Input Slave Output MOSI - Master Output Slave Input Посмотрите AN AVR252, AN AVR107 - может, чем поможет ЗЫ. Ещё раз - не читайте всякой фигни (курс забаненного здесь кое-кого). Проблемы оттуда. Да что о поблемах каких то все говорят?... Гы, его тут забанили... забавно... Кстати процессорам я именно по его сайту начинал учиться... Конечно сумбурно, но понять можно... CodeVisionAVR, VMLAB, Proteus, все узнал именно от туда... конечно как человека автора я не знаю да и хрен с ним... А вот AN AVR252 и AN AVR107, я не понял что есть такое. Цитата(OLEG_BOS @ Sep 24 2007, 00:28)  ..Ну я надеюсь о согласованием уровней все ОК ?  А вот это правильный вопрос.... Память на 2,7 Вольта, а шпарю я на пяти  , но в рассказе забанненного кое-кого я прочитал что она может работать и на пяти.
|
|
|
|
|
Sep 23 2007, 21:02
|
Профессионал
    
Группа: Свой
Сообщений: 1 266
Регистрация: 22-04-05
Из: Киев
Пользователь №: 4 387

|
Цитата я не понял что есть такое. Вот-вот. Проблема в том, что сначала нужно изучать информацию от производителя, а уж потом религиозные толкования  Припадите к истокам, плз. -> http://www.atmel.com/dyn/products/app_note...p?family_id=607ЗЫ. Некто забанен был за неприкрытую рекламу. Но, ИМХО, о содержании известного ресурса нужно было бы много нехороших слов сказать. Но ОНО их не понимает;(
--------------------
aka Vit
|
|
|
|
|
Sep 23 2007, 21:05
|

Участник

Группа: Участник
Сообщений: 47
Регистрация: 22-08-07
Пользователь №: 29 980

|
Цитата(sensor_ua @ Sep 24 2007, 01:02)  Вот-вот. Проблема в том, что сначала нужно изучать информацию от производителя, а уж потом религиозные толкования  Припадите к истокам, плз. -> http://www.atmel.com/dyn/products/app_note...p?family_id=607AN значи аппноут... Сейчас посмотрю и спать, вставать в шесть утра
|
|
|
|
|
Sep 23 2007, 21:13
|
Профессионал
    
Группа: Свой
Сообщений: 1 266
Регистрация: 22-04-05
Из: Киев
Пользователь №: 4 387

|
Цитата она может работать и на пяти Для этого нужно не забыть, что уровни КМОП (у проца) есть для лог. 1 - 0.7 и выше (т.е. выше 3.5В), а 0 - 0.3 и ниже от напряжения питания. Т.е. линию приёма от FLASH нужно тем или иным способом согласовать. Хотя вид непонятности говорит о близости сигнала к 1-е, а не к 0, т.е. проблемы разные (хотя могут сосуществовать совместно)
--------------------
aka Vit
|
|
|
|
|
Sep 24 2007, 03:53
|

Mute Beholder
  
Группа: Свой
Сообщений: 260
Регистрация: 4-04-07
Из: Третья планета от Солнца
Пользователь №: 26 754

|
Цитата(lomtev @ Sep 23 2007, 14:48)  Кто-нибудь сталкивался или работал с данным чипом? В тупике. предположений нет вообще. Если кто хочет помочь и нуждается в наглядной демонстрации кода, то я выложу. Есть готовая рабочая билиотека для этой памяти на http://kurt.embedders.org/
--------------------
Common sense is not so common.
|
|
|
|
|
Sep 24 2007, 04:12
|
Профессионал
    
Группа: Свой
Сообщений: 1 266
Регистрация: 22-04-05
Из: Киев
Пользователь №: 4 387

|
Цитата Есть готовая рабочая билиотека А была надежда  , что lomtev хотя бы из любопытства обнаружит на страничке аппликух AN AVR335:)))
--------------------
aka Vit
|
|
|
|
|
Sep 24 2007, 12:01
|
Профессионал
    
Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008

|
Раньше выпускались АТ45 с какой то буквой(вроде  , которая могла работать от 5в, сейчас их выпуск ПРЕКРАЩЕН, смотрите внимательно даташиты - они отличались последней буквой в названии. Я сейчас работаю именно с АТ45DB161D питание и меги и флешки 3.3в - никаких проблем, за исключением того что пришлось поменять опкоды некоторые, в частности и опкод чтения регистра статуса. Библиотеку не помню где брал, может и с avrfreaks Код #define FlashPageRead 0xd2 // Main memory page read #define FlashToBuf1Transfer 0x53 // Main memory page to buffer 1 transfer #define Buf1Read 0xd4 // Buffer 1 read #define FlashToBuf2Transfer 0x55 // Main memory page to buffer 2 transfer #define Buf2Read 0xd6 // Buffer 2 read #define StatusReg 0xd7 // Status register #define AutoPageReWrBuf1 0x58 // Auto page rewrite through buffer 1 #define AutoPageReWrBuf2 0x59 // Auto page rewrite through buffer 2 #define FlashToBuf1Compare 0x60 // Main memory page to buffer 1 compare #define FlashToBuf2Compare 0x61 // Main memory page to buffer 2 compare #define ContArrayRead 0x68 // Continuous Array Read (Note : Only A/B-parts supported) #define FlashProgBuf1 0x82 // Main memory page program through buffer 1 #define Buf1ToFlashWE 0x83 // Buffer 1 to main memory page program with built-in erase #define Buf1Write 0x84 // Buffer 1 write #define FlashProgBuf2 0x85 // Main memory page program through buffer 2 #define Buf2ToFlashWE 0x86 // Buffer 2 to main memory page program with built-in erase #define Buf2Write 0x87 // Buffer 2 write #define Buf1ToFlash 0x88 // Buffer 1 to main memory page program without built-in erase #define Buf2ToFlash 0x89 // Buffer 2 to main memory page program without built-in erase вот коды которые у меня работают
--------------------
|
|
|
|
|
Sep 24 2007, 14:00
|

Участник

Группа: Участник
Сообщений: 47
Регистрация: 22-08-07
Пользователь №: 29 980

|
Цитата(sensor_ua @ Sep 24 2007, 08:12)  А была надежда  , что lomtev хотя бы из любопытства обнаружит на страничке аппликух AN AVR335:))) Возможно удивитесь, не такой я лузер конченный и этот аппноут у меня уже пару месяцев валяется, все фунции списаны с него и изучил его я с первой до последней строчки. А еще замечу, что там используется 28 ножный флеш и проверка занятости идет через BUSY, а в 8 ногом ее нет и приходится факаться с этим регистром. Если бы все было так просто. Цитата(GDI @ Sep 24 2007, 16:01)  Раньше выпускались АТ45 с какой то буквой(вроде  , которая могла работать от 5в, сейчас их выпуск ПРЕКРАЩЕН, смотрите внимательно даташиты - они отличались последней буквой в названии. Я сейчас работаю именно с АТ45DB161D питание и меги и флешки 3.3в - никаких проблем, за исключением того что пришлось поменять опкоды некоторые, в частности и опкод чтения регистра статуса. Библиотеку не помню где брал, может и с avrfreaks Код #define FlashPageRead 0xd2 // Main memory page read #define FlashToBuf1Transfer 0x53 // Main memory page to buffer 1 transfer #define Buf1Read 0xd4 // Buffer 1 read #define FlashToBuf2Transfer 0x55 // Main memory page to buffer 2 transfer #define Buf2Read 0xd6 // Buffer 2 read #define StatusReg 0xd7 // Status register #define AutoPageReWrBuf1 0x58 // Auto page rewrite through buffer 1 #define AutoPageReWrBuf2 0x59 // Auto page rewrite through buffer 2 #define FlashToBuf1Compare 0x60 // Main memory page to buffer 1 compare #define FlashToBuf2Compare 0x61 // Main memory page to buffer 2 compare #define ContArrayRead 0x68 // Continuous Array Read (Note : Only A/B-parts supported) #define FlashProgBuf1 0x82 // Main memory page program through buffer 1 #define Buf1ToFlashWE 0x83 // Buffer 1 to main memory page program with built-in erase #define Buf1Write 0x84 // Buffer 1 write #define FlashProgBuf2 0x85 // Main memory page program through buffer 2 #define Buf2ToFlashWE 0x86 // Buffer 2 to main memory page program with built-in erase #define Buf2Write 0x87 // Buffer 2 write #define Buf1ToFlash 0x88 // Buffer 1 to main memory page program without built-in erase #define Buf2ToFlash 0x89 // Buffer 2 to main memory page program without built-in erase вот коды которые у меня работают А не могли бы вы скинуть сами функции записи-чтения. Коды у меня прописаны те же самые.
|
|
|
|
|
Sep 24 2007, 14:30
|
Профессионал
    
Группа: Свой
Сообщений: 1 266
Регистрация: 22-04-05
Из: Киев
Пользователь №: 4 387

|
Цитата Возможно удивитесь Не принимайте так близко к сердцу. При несколько неудачных Ваших результатах после "пошагового хождения" возникают сомнения в правильности подбора общего подхода. Изучение документации, в том числе особенностей применения чипа от производителя, без некоторого любопытства может занимать несколько меньше времени, но иногда всё же лучше оглядеть всё доступное. Так как для Вас хранилище аппнотов от производителя было некоторой новостью (может мне показалось), я позволил себе намекнуть, что Вы таки бываете любопытным. Оскорбить не думал, но поддеть - да  Лучше скажите, что поправили и как что работает. Кстати, может какой ляпсус в настройках пинов? может DDRn на выход для CS не установили?
--------------------
aka Vit
|
|
|
|
|
Sep 24 2007, 20:01
|

Участник

Группа: Участник
Сообщений: 47
Регистрация: 22-08-07
Пользователь №: 29 980

|
Цитата(sensor_ua @ Sep 24 2007, 18:30)  Не принимайте так близко к сердцу. При несколько неудачных Ваших результатах после "пошагового хождения" возникают сомнения в правильности подбора общего подхода. Изучение документации, в том числе особенностей применения чипа от производителя, без некоторого любопытства может занимать несколько меньше времени, но иногда всё же лучше оглядеть всё доступное. Так как для Вас хранилище аппнотов от производителя было некоторой новостью (может мне показалось), я позволил себе намекнуть, что Вы таки бываете любопытным. Оскорбить не думал, но поддеть - да  Лучше скажите, что поправили и как что работает. Кстати, может какой ляпсус в настройках пинов? может DDRn на выход для CS не установили? Проработал строку SPCR = 0x5C; //Включили SPI Вроде все нормально как написано в сноске ниже / interrupt выключен,SPI port включен, master mode, MSB first, SPI mode 3, Fcl/4 Порт инициализируется тоже верно: void setup(void) // настройка переферии МК { DDRB = 0xBD; // SPI Port initialisation 1011 0101 // SCK SO SI CS RDY/BSY // PB7 PB6 PB5 PB4 PB3 PB2 PB1 PB0 // Настройка выводов МК // Out In Out Out In Out In Out // 1 0 1 1 1 1 0 1 PORTB = 0xFF; // all outputs high, inputs have pullups #asm("sei") // разрешить прерывания } Распаяно у меня тоже верно. Единственная строчка которая у меня вызвала непонятие это из аппноута 335, а именно: do { write_SPI(0xFF); // write dummy value to start register shift while(!(ACSR&T1_OVF)); // wait for timer1 overflow interrupt OCR1B = SPDR; // play data from shift register ACSR &= (~T1_OVF); // clear the signal flag } while (--buffer_counter); Читают буфер и пишут его в регистр, но куда пишут не важно, можно и в массив. Идет ожидание прерывания после записи фиктивного значения. Сама фукция по вектору: #pragma vector = TIMER1_OVF_vect __interrupt void out_now(void) { ACSR |= T1_OVF; // an interrupt has occured } Это прерывание связано непосредственно с передачей в ШИМ или нужно ждать чего-то после отправки фиктивного значения или это взаимозаменияемо с while (!(SPSR & temp)); ???? И кстати если можно, то пожалуйста на ТЫ...
Сообщение отредактировал lomtev - Sep 24 2007, 20:05
|
|
|
|
|
Sep 24 2007, 21:16
|

Участник

Группа: Участник
Сообщений: 47
Регистрация: 22-08-07
Пользователь №: 29 980

|
В прикрепленном файле функции. Файл не большой поскольку пишу-читаю только буфер. Основной код очень прост. int main(void) { setup(); //Установка SPI erasing(); // Стереть пмять for(k=0;k<176;k++){ //цикл записи в память if(k<124)flash_write(k); else flash_write(246-k); } flash_read(); while (1){} return(0); }
Прикрепленные файлы
simple.txt ( 7.27 килобайт )
Кол-во скачиваний: 146
|
|
|
|
|
Sep 25 2007, 03:34
|
Профессионал
    
Группа: Свой
Сообщений: 1 266
Регистрация: 22-04-05
Из: Киев
Пользователь №: 4 387

|
1) Прерывания пока разрешать не нужно (в setup()), а иногда и вредно - а вдруг где-то в дебрях спрятанного текста  обработчик прерывания SPI от Папы Карло затерялся? 2) Сначала нужно всё-таки записать-прочитать буфер, чтобы убедиться в правильной настройке интерфейса, пинов и вааще - похоже, к этому уже пришли. Для работы с буфером ничего стирать не нужно (там ОЗУ), т.е. erasing(); нафиг. Это для отладки. 3) В функции записи нет строки unsigned char temp = 0x80; оно типа глобально, но в чтениичто-то есть -намешано. Вообще использовать переменные там, где можно использовать литералы (константные объявления через #define) - это моветон. Переменные жрут озу (стек), их нужно правильно объявлять, не забывать инициализировать, не позволять опитмизатору их выбрасывать... Кроме того, цифирьки разбирать типа SPCR = 0x5C; не очень хорошо - это приводит к нежеланию читать код у меня (ИМХО, и у большинства тоже), но это бы полбеды - беда в том, что такое написание приводит к механическим ошибкам и не позволяет поддерживать код уже через очень короткое время после написания. Компилятор всё-равно всё в цифирьки перепакует, но нафига человеку его работу пытаться сделать, да ещё и неуклюже? Помотрите хотя бына примеры инициализации из DS - там достаточно читабельно. Короче, замените, где надо эту temp на (1<<SPIF), а где на (1<<BUSY). Равно и остальное, а то обсуждение усложняется  5) Приведение типа к знаковому (char)SPDR в функции чтения - нафиг. Объявление bt_word[] не нашёл. 4)Для отладки уберите всякие static buffer_counter и запишите хотя бы один раз в буфер с нулевого адреса несколько байт данных, ну и прочитайте оттуда же. Цикл, вызывающий запись в буфер одного байта, уберите из main и положите в функцию записи, а лучше пока вааще убить и попробовать тупо записать, например, 4 константы. 5) Убрав вызов erasing() из main перестанет выключаться SPI 8-D SPCR = 0x00; // Выключить SPI и есть вероятность, что то, что написано далее, будет фунциклировать  6) Функцию стирания надо будет рихтовать - там некорректные кусочки ожидания готовности (обсуждали ранее)- ожидание либо вынести в отдельную функцию, либо по месту поправить. Я, например, не использую принципиально функции записи со стиранием, потому, если драйвер для себя, то могу запихнуть ожидание внутрь, но если иначе, то смысла прятать нет. Кроме того, в ожидании (а это порядком 40+ мс!!!) часто можно заниматься чем-то более важным  иногда узнавая, как же ж там дела...
--------------------
aka Vit
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|