DeXteR 0 10 января, 2006 Опубликовано 10 января, 2006 · Жалоба Добрый день уважаемые специалисты :) Кто нибудь пробывал подключать к AVR DataFlash Необходимо сделать примерно то что описано в avr335 толька с управлением по I2C Перекомпилил все под Мегу 8 (поменял ножки) Собрал схему на макетнице DataFlash AT45DB081B питаю 3.3 вольтами Атмегу 8 - Пятью В датащите на AT45DB081B сказано что с 5 вольтовыми сигналами нет проблемм Тем немение DataFlash ничего не отвечает несмотря на то что осцилографом видно как Атмега посылает данные. Сигнала BUSY тоже нету. На выходе ДатаФлеща - 0. Может спалил Незнаю Подскажите пожалуста если кто имеет какието мысли по этому поводу Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AndyBig 8 10 января, 2006 Опубликовано 10 января, 2006 · Жалоба Работал с DataFlash + ATmega64, пользуясь аппаратным SPI. Питание контроллера - 5В, флэшки - 3,3В. Никаких проблем не возникло. Проверьте: 1. Сконфигурированы ли у Вас соответствующие порты контроллера (MISO на вход, MOSI, ~SS и SCK на выход) 2. Включен ли SPI 3. Правильно ли выставлен режим SPI (должен быть 0 или 3) 4. Перед началом каждой команды, посылаемой в DataFlash, необходимо деактивировать и вновь активировать ChipEnable. Текущая команда выполняется флэшкой именно до деактивации chipenable, а не просто до получения новой команды (я на этом поначалу обжегся). Кстати, сигнал BUSY, как и соответствующий флаг в регистре статуса, выставляется только на время выполнения нескольких команд (запись буфера в память, чтение памяти в буфер, сравнение памяти и буфера) и не означает, что флэшку вообще нельзя беспокоить. Скажем, получать у нее статус можно в любое время. Читать и писать буфер - тоже. Об этом довольно подробно написано в даташите на флэшку и в аппликейшне AN-4 Using Atmel's DataFlash. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
solidreg 0 10 января, 2006 Опубликовано 10 января, 2006 · Жалоба Работал с AT45DB021B, аппаратный SPI, но только всё 3.3В. Ни наких проблем, всё работает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DeXteR 0 10 января, 2006 Опубликовано 10 января, 2006 · Жалоба Работал с DataFlash + ATmega64, пользуясь аппаратным SPI. Питание контроллера - 5В, флэшки - 3,3В. Никаких проблем не возникло. Проверьте: 1. Сконфигурированы ли у Вас соответствующие порты контроллера (MISO на вход, MOSI, ~SS и SCK на выход) 2. Включен ли SPI 3. Правильно ли выставлен режим SPI (должен быть 0 или 3) 4. Перед началом каждой команды, посылаемой в DataFlash, необходимо деактивировать и вновь активировать ChipEnable. Текущая команда выполняется флэшкой именно до деактивации chipenable, а не просто до получения новой команды (я на этом поначалу обжегся). Кстати, сигнал BUSY, как и соответствующий флаг в регистре статуса, выставляется только на время выполнения нескольких команд (запись буфера в память, чтение памяти в буфер, сравнение памяти и буфера) и не означает, что флэшку вообще нельзя беспокоить. Скажем, получать у нее статус можно в любое время. Читать и писать буфер - тоже. Об этом довольно подробно написано в даташите на флэшку и в аппликейшне AN-4 Using Atmel's DataFlash. 1. Порты сконфигурированы как нада. 2. СПиАй включен Обмен по нему видел осцилграфом Но память ничего не отвечала 3. Насчет режима - содрал с АВР335 точно не проверял - надеюсь ошибка не там - проверю. 4. Насчет ChipEnable такого не видел осцилографом и в коде похоже нету. Надеюсь что проблемма в этом Завтра приду на работу - все проверю. Вопрос: на какой интервал времени достаточно запретить а потом разрешить Флешку ?? Ещораз спасибо Хотел сделать акцент Использовал ли кто либо при работе AVR335: Digital Sound Recorder with AVR and DataFlash или все сами писали процедуры обмена с ДатаФлешкой ??? Я слышал что а Апноутах часто бывают ошибки Хотя скорее вего ошибаюсь я Спасибо Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AndyBig 8 10 января, 2006 Опубликовано 10 января, 2006 · Жалоба и в коде похоже нету Ну как же... Я сам там видел :). Я тоже ковырял этот аппноут и именно там заметил деактивацию чипселекта. Например: void write_to_flash(unsigned char flash_data) { static unsigned int buffer_counter; static unsigned int page_counter; unsigned char temp = 0x80; if((ACSR & 0x02)) // if flag is set that new data has to be written { buffer_counter = 0; page_counter = 0; // reset the counter if new data has to be written ACSR &= 0xFD; // clear the signal flag } while(!(PINB & 0x02)); // check if flash is busy PORTB &= ~DF_CHIP_SELECT; // enable DataFlash SPDR = BUFFER_1_WRITE; while (!(SPSR & temp)); // wait for data transfer to be completed SPDR = 0x00; // don't cares while (!(SPSR & temp)); // wait for data transfer to be completed SPDR = (char)(buffer_counter>>8); // don't cares plus first two bits of buffer address while (!(SPSR & temp)); // wait for data transfer to be completed SPDR = (char)buffer_counter; // buffer address (max. 2^8 = 256 pages) while (!(SPSR & temp)); // wait for data transfer to be completed SPDR = flash_data; // write data into SPI Data Register while (!(SPSR & temp)); // wait for data transfer to be completed PORTB |= DF_CHIP_SELECT; // disable DataFlash buffer_counter++; if (buffer_counter > 528) // if buffer full write buffer into memory page { buffer_counter = 0; if (page_counter < 4096) // if memory is not full { PORTB &= ~DF_CHIP_SELECT; // enable DataFlash SPDR = B1_TO_MM_PAGE_PROG_WITHOUT_ERASE; // write data from buffer1 to page while (!(SPSR & temp)); // wait for data transfer to be completed SPDR = (char)(page_counter>>6); while (!(SPSR & temp)); // wait for data transfer to be completed SPDR = (char)(page_counter<<2); while (!(SPSR & temp)); // wait for data transfer to be completed SPDR = 0x00; // don't cares while (!(SPSR & temp)); // wait for data transfer to be completed PORTB |= DF_CHIP_SELECT; // disable DataFlash page_counter++; } else { PORTB |= 0x08; // turn LED off while (!(PIND & 2)); // wait until button for recording (button 1) is released } } } Вопрос: на какой интервал времени достаточно запретить а потом разрешить Флешку ?? Учитывая, что флэшка работает на частоте до 20 МГц, никаких пауз между деактивацией и активацией делать не надо. Лишь бы компилятор не "оптимизировал" код, который в результате оставляет содержимое регистра в прежнем виде :)). На всякий случай прилагаю код, который у меня на атмеге64 работает прекрасно. Просьба ногами не бить, изяществом код не блещет :)))). at45spi.rar Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
beer_warrior 0 11 января, 2006 Опубликовано 11 января, 2006 · Жалоба BTW, господа никто не сталкивался с интересным эффектом - когда пишешь или читаешь большой массив на границе страниц возникают сбои? Лечилось задержкой между подачей команд. В фирменной доке по этому поводу молчание. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AndyBig 8 11 января, 2006 Опубликовано 11 января, 2006 · Жалоба Я не читал больше 30 КБ за раз и при этих объемах никаких сбоев не замечал. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DeXteR 0 11 января, 2006 Опубликовано 11 января, 2006 · Жалоба Добрый день Огромное спасибо всем У меня заработало !!!! Дело было именно в ноге CS Незная оставил микросхему постоянно выбраной. Хотел задать ещо пару попроссов 1. Дело в том что Атмега питаеться от 5 В а датафлеш от 3.3 Небудит ли проблемм с уровнем в канале данных от датафлешки к Атмеги Нужен ли там приобразователь уровня ?? Если да - какой посоветуете. 2. Счас Датафлешка питаеться от LM317 Гдето видел схему подачи питания через 3-4 кремниевых диода. Насколько это приемлимо ??? Ещораз спасибо за участие ! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AndyBig 8 11 января, 2006 Опубликовано 11 января, 2006 · Жалоба 1. Проблем не будет, ничего не нужно. 2. А зачем через диоды? Чем не устраивает стабилизатор? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DeXteR 0 11 января, 2006 Опубликовано 11 января, 2006 · Жалоба 1. Проблем не будет, ничего не нужно. 2. А зачем через диоды? Чем не устраивает стабилизатор? Да здоровый очень А Маленькую версию в Одессе заказывать нада и ждать долго =( Да и по деньгам нада быть оптимальным .... Хотя думаю обойдусь стабилизатором в ТО220 =) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
*SERG 0 12 января, 2006 Опубликовано 12 января, 2006 · Жалоба Дело было именно в ноге CS Незная оставил микросхему постоянно выбраной. А почему так нельзя??? Как надо, подскажите плиз :mellow: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Rst7 5 12 января, 2006 Опубликовано 12 января, 2006 · Жалоба Дело было именно в ноге CS Незная оставил микросхему постоянно выбраной. А почему так нельзя??? Как надо, подскажите плиз :mellow: Потому что переход CS 0->1 есть признак окончания комманды и старт ее выполнения. А переход 1->0 соответственно начало комманды. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AndyBig 8 12 января, 2006 Опубликовано 12 января, 2006 · Жалоба Да здоровый очень Ну, если дешево и сердито, то можно использовать схему типового линейного стабилизатора - стабилитрон+резистор+транзистор, но все же лучше использовать интегральный стабилизатор. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
IgorKossak 0 12 января, 2006 Опубликовано 12 января, 2006 · Жалоба 1. Дело в том что Атмега питаеться от 5 В а датафлеш от 3.3 Небудит ли проблемм с уровнем в канале данных от датафлешки к Атмеги Нужен ли там приобразователь уровня ?? Если да - какой посоветуете. Преобразователь уровня желателен именно в случае применения AVR, т. к. у последнего CMOS уровни, в отличие от многих 51-х, у которых TTL уровни. 2. Счас Датафлешка питаеться от LM317 Гдето видел схему подачи питания через 3-4 кремниевых диода. Насколько это приемлимо ??? Приемлемо, применял. Присоединённые файлы разные по содержимому, а не просто перевод! 3V_DataFlash_to_5V_rus.pdf 3V_DataFlash_to_5V.PDF Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
defunct 0 12 января, 2006 Опубликовано 12 января, 2006 · Жалоба 1. Проблем не будет, ничего не нужно. 2. А зачем через диоды? Чем не устраивает стабилизатор? Да здоровый очень А Маленькую версию в Одессе заказывать нада и ждать долго =( Да и по деньгам нада быть оптимальным .... Хотя думаю обойдусь стабилизатором в ТО220 =) маленькие 3х вольтовые стабилизаторы TPS76333 - MSOP.. IRU1010-33 - SOT223.. 78L03 - как KT3102 ;> в крайнем случае питайте DataFlash от стабилитрона, SMD стабилитроны тянут 20-30MA должно хватить для флешки. а можно и дешевым опером запитать, LM358/LM158 - включить по схеме Voltage Follower итого 2 резюка и опер ~70коп ;> когда была напряженка со стабилизаторами ARM от опера питал, у LM358 как раз два опера в одном корпусе - 2х уровневое напряжения выдавал... :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться