Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: AT91SAM7X256 & SPI
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
mungo
Такой вопрос. На отладочной плате SAM7X-EK запустил SPI. Взял пример для работы с dataflash от SAM9. Чуть-чуть переделал, заработало. Работало надежно, как часы. Емкость у at45db321 большая, так что, чтобы избавить себя от гемороя, взял FatFs и вставил поддержку FAT12 на флешку. Сразу пропала проблема с постоянной необходимость дурацкого выравнивания в 528 байт.
Затем пришла готовая плата для финального изделия. Там поставили at45db161. По емкости вполне достаточно. Правда, при разводке платы пришлось перевесить с SPI0 на SPI1. Поставили, как и рекомендовано, как можно ближе к процу, чтобы помех избежать (частота шины 12 Мгц).
Тут начались траблы. Сначала не виделась флешка вообще. Поиграли с подтяжками, заработало. Позже, когда начал доводить проект до ума, выяснилось, что при длинных операциях чтения/записи вероятность сбоя 100%. При этом если, скажем, читаю/пишу блок в 10 Кб, то все путем, а если более 50 - сбой.
Перерыл уже все. Думал, может просто не правильно код адаптировал под новую схему. Все сконфигурировано правильно. Подтяжками и включением/выключением блоков играл в целях уменьшения потребления - отключил, не помогло.
Люди добрые, у кого есть идеи, где ещё порыть? Четвертый день бьюсь, не понимаю, как победить. wacko.gif
Dron_Gus
У 161 может быть разный размер страницы 512/528 байт.
mungo
Цитата(Dron_Gus @ Oct 26 2007, 09:24) *
У 161 может быть разный размер страницы 512/528 байт.

Это понятно. Ничего не менял, оставил по умолчанию 528. Просто суть в том, что в некоторый момент считываются просто 0xFF в случайном месте. Более того, только что обнаружил, что при записи строго структурированных данных (скажем, несколько одинаковых строк в сектор) все проходит на ура. Проблема именно с неструктурированными данными. При записи данных в сектор через rand() сбой может произойти даже после 2-3 секторов!
mungo
Включение CSAAT (чтобы не отпускал CS) позволяет добиться устойчивого чтения, но запись ессно перестает работать...
Ну неужели никто не сталкивался с dataflash + sam7x?
Calculator
Цитата(mungo @ Oct 26 2007, 16:54) *
Включение CSAAT (чтобы не отпускал CS) позволяет добиться устойчивого чтения, но запись ессно перестает работать...
Ну неужели никто не сталкивался с dataflash + sam7x?

Сталкивались, но таких проблем не было. Может все-таки проблемы разводки или блокировочного конденсатора нет или еще что аппаратное?
Dron_Gus
Цитата(mungo @ Oct 26 2007, 14:54) *
Включение CSAAT (чтобы не отпускал CS) позволяет добиться устойчивого чтения, но запись ессно перестает работать...




Я вообще CS "ручками" дергаю. Благо это не так накладно.
mungo
Да, оказалось, разводка. Слишком близко кварц и дорожка CS. Максимальная скорость 1 мбит если, то все работает... Сразу не подумал, а жаль. Сколько бы времени сэкономил!
Harbour
Не знаю насчет разводки, но at45 довольно медленные чипы для at91sam7 default SPI clk setting, см. datasheet по ним - я игрался с задержками, вот кусок кода :

...
void spi_set_speed(unsigned char speed)
{
unsigned long reg;
unsigned char dlybs = 0x7; // порог 4
AT91PS_SPI pSPI = AT91C_BASE_SPI;

if (speed < SPI_SCBR_MIN)
speed = SPI_SCBR_MIN;
reg = pSPI->SPI_CSR[SPI_CSR_NUM];
reg = (reg & ~(AT91C_SPI_SCBR)) | (dlybs << 16) | (speed << 8);
pSPI->SPI_CSR[SPI_CSR_NUM] = reg;
}
.......

при dlybs = 4 попадались чипы, которые неустойчиво работали.
mungo
Некоторое вермя не разбирался, но вот вернулся к той же задаче.
Дальше стало ещё интереснее. При одних и тех же параметрах на монтажке и нормальной плате различия оказались в картинке осцилограммы. И сильные. Такое впечатление, что CS живет своей жизнью. И такт тоже нечетко виден. Даже из чувства эксперимента повесили ту же флешку на монтажку. Там все заработало опять.
Сомнение терзают вот по какому поводу: на монтажке используется модуль SPI 0, а здесь 1. Вроде никаких различий быть не должно, хотя в доке ваще трудно найти описание, что есть два модуля.
Быть может, кто пробовал SPI1 и тоже заметил какие траблы?
aaarrr
Цитата(mungo @ Oct 30 2007, 15:50) *
Быть может, кто пробовал SPI1 и тоже заметил какие траблы?

Пробовал оба, никакой разницы не заметил.
mungo
Цитата(Harbour @ Oct 27 2007, 03:04) *
Не знаю насчет разводки, но at45 довольно медленные чипы для at91sam7 default SPI clk setting, см. datasheet по ним - я игрался с задержками, вот кусок кода :

...
void spi_set_speed(unsigned char speed)
{
unsigned long reg;
unsigned char dlybs = 0x7; // порог 4
AT91PS_SPI pSPI = AT91C_BASE_SPI;

if (speed < SPI_SCBR_MIN)
speed = SPI_SCBR_MIN;
reg = pSPI->SPI_CSR[SPI_CSR_NUM];
reg = (reg & ~(AT91C_SPI_SCBR)) | (dlybs << 16) | (speed << 8);
pSPI->SPI_CSR[SPI_CSR_NUM] = reg;
}
.......

при dlybs = 4 попадались чипы, которые неустойчиво работали.


Странно, но при DLYBS=7 всё вдруг заработало... 07.gif
Я так понимаю, что дело исключительно в at45db161 и только...
Harbour
чудес в зыбком мире электроники не бывает - осциллограф тому свидетель wink.gif
Kirill Frolov
Цитата(mungo @ Oct 31 2007, 14:16) *
Странно, но при DLYBS=7 всё вдруг заработало... 07.gif
Я так понимаю, что дело исключительно в at45db161 и только...


Для AT91SAM7S очень помогло установить DLYBCT в 1 вместо 0 (т.е. 32*DLYBCT/MCK -- т.е. ввести 32 такта MCU паузы между передачей каждого байта). До того -- разные глюки с разными карточками и разными MCU (взятыми, предположительно, из одной коробки, в одинаковых платах)...

PS: да, речь вообще про SD-карты. MMC работали хорошо и так. Плохо прочитал и бросился отвечать. Но тоже SPI и похожие проблемы.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.