реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> AT91SAM7X256 & SPI, Крыша едет не знаю что делать
mungo
сообщение Oct 26 2007, 06:17
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 63
Регистрация: 21-09-07
Из: СССР
Пользователь №: 30 719



Такой вопрос. На отладочной плате SAM7X-EK запустил SPI. Взял пример для работы с dataflash от SAM9. Чуть-чуть переделал, заработало. Работало надежно, как часы. Емкость у at45db321 большая, так что, чтобы избавить себя от гемороя, взял FatFs и вставил поддержку FAT12 на флешку. Сразу пропала проблема с постоянной необходимость дурацкого выравнивания в 528 байт.
Затем пришла готовая плата для финального изделия. Там поставили at45db161. По емкости вполне достаточно. Правда, при разводке платы пришлось перевесить с SPI0 на SPI1. Поставили, как и рекомендовано, как можно ближе к процу, чтобы помех избежать (частота шины 12 Мгц).
Тут начались траблы. Сначала не виделась флешка вообще. Поиграли с подтяжками, заработало. Позже, когда начал доводить проект до ума, выяснилось, что при длинных операциях чтения/записи вероятность сбоя 100%. При этом если, скажем, читаю/пишу блок в 10 Кб, то все путем, а если более 50 - сбой.
Перерыл уже все. Думал, может просто не правильно код адаптировал под новую схему. Все сконфигурировано правильно. Подтяжками и включением/выключением блоков играл в целях уменьшения потребления - отключил, не помогло.
Люди добрые, у кого есть идеи, где ещё порыть? Четвертый день бьюсь, не понимаю, как победить. wacko.gif


--------------------
Сомневаюсь, и вам советую!
Go to the top of the page
 
+Quote Post
Dron_Gus
сообщение Oct 26 2007, 06:24
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 9-01-05
Из: Санкт-Петербург
Пользователь №: 1 861



У 161 может быть разный размер страницы 512/528 байт.


--------------------
Если сверху смотреть, то сбоку кажется, что снизу ничего не видно.
Go to the top of the page
 
+Quote Post
mungo
сообщение Oct 26 2007, 06:36
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 63
Регистрация: 21-09-07
Из: СССР
Пользователь №: 30 719



Цитата(Dron_Gus @ Oct 26 2007, 09:24) *
У 161 может быть разный размер страницы 512/528 байт.

Это понятно. Ничего не менял, оставил по умолчанию 528. Просто суть в том, что в некоторый момент считываются просто 0xFF в случайном месте. Более того, только что обнаружил, что при записи строго структурированных данных (скажем, несколько одинаковых строк в сектор) все проходит на ура. Проблема именно с неструктурированными данными. При записи данных в сектор через rand() сбой может произойти даже после 2-3 секторов!


--------------------
Сомневаюсь, и вам советую!
Go to the top of the page
 
+Quote Post
mungo
сообщение Oct 26 2007, 10:54
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 63
Регистрация: 21-09-07
Из: СССР
Пользователь №: 30 719



Включение CSAAT (чтобы не отпускал CS) позволяет добиться устойчивого чтения, но запись ессно перестает работать...
Ну неужели никто не сталкивался с dataflash + sam7x?


--------------------
Сомневаюсь, и вам советую!
Go to the top of the page
 
+Quote Post
Calculator
сообщение Oct 26 2007, 11:17
Сообщение #5


Участник
*

Группа: Свой
Сообщений: 45
Регистрация: 19-04-07
Пользователь №: 27 172



Цитата(mungo @ Oct 26 2007, 16:54) *
Включение CSAAT (чтобы не отпускал CS) позволяет добиться устойчивого чтения, но запись ессно перестает работать...
Ну неужели никто не сталкивался с dataflash + sam7x?

Сталкивались, но таких проблем не было. Может все-таки проблемы разводки или блокировочного конденсатора нет или еще что аппаратное?
Go to the top of the page
 
+Quote Post
Dron_Gus
сообщение Oct 26 2007, 11:54
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 9-01-05
Из: Санкт-Петербург
Пользователь №: 1 861



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




Я вообще CS "ручками" дергаю. Благо это не так накладно.


--------------------
Если сверху смотреть, то сбоку кажется, что снизу ничего не видно.
Go to the top of the page
 
+Quote Post
mungo
сообщение Oct 26 2007, 11:55
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 63
Регистрация: 21-09-07
Из: СССР
Пользователь №: 30 719



Да, оказалось, разводка. Слишком близко кварц и дорожка CS. Максимальная скорость 1 мбит если, то все работает... Сразу не подумал, а жаль. Сколько бы времени сэкономил!


--------------------
Сомневаюсь, и вам советую!
Go to the top of the page
 
+Quote Post
Harbour
сообщение Oct 27 2007, 01:04
Сообщение #8


Местами Гуру
*****

Группа: Validating
Сообщений: 1 103
Регистрация: 5-12-04
Пользователь №: 1 323



Не знаю насчет разводки, но 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 попадались чипы, которые неустойчиво работали.
Go to the top of the page
 
+Quote Post
mungo
сообщение Oct 30 2007, 12:50
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 63
Регистрация: 21-09-07
Из: СССР
Пользователь №: 30 719



Некоторое вермя не разбирался, но вот вернулся к той же задаче.
Дальше стало ещё интереснее. При одних и тех же параметрах на монтажке и нормальной плате различия оказались в картинке осцилограммы. И сильные. Такое впечатление, что CS живет своей жизнью. И такт тоже нечетко виден. Даже из чувства эксперимента повесили ту же флешку на монтажку. Там все заработало опять.
Сомнение терзают вот по какому поводу: на монтажке используется модуль SPI 0, а здесь 1. Вроде никаких различий быть не должно, хотя в доке ваще трудно найти описание, что есть два модуля.
Быть может, кто пробовал SPI1 и тоже заметил какие траблы?


--------------------
Сомневаюсь, и вам советую!
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Oct 30 2007, 13:04
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(mungo @ Oct 30 2007, 15:50) *
Быть может, кто пробовал SPI1 и тоже заметил какие траблы?

Пробовал оба, никакой разницы не заметил.
Go to the top of the page
 
+Quote Post
mungo
сообщение Oct 31 2007, 11:16
Сообщение #11


Участник
*

Группа: Участник
Сообщений: 63
Регистрация: 21-09-07
Из: СССР
Пользователь №: 30 719



Цитата(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 и только...


--------------------
Сомневаюсь, и вам советую!
Go to the top of the page
 
+Quote Post
Harbour
сообщение Nov 1 2007, 05:25
Сообщение #12


Местами Гуру
*****

Группа: Validating
Сообщений: 1 103
Регистрация: 5-12-04
Пользователь №: 1 323



чудес в зыбком мире электроники не бывает - осциллограф тому свидетель wink.gif
Go to the top of the page
 
+Quote Post
Kirill Frolov
сообщение Nov 1 2007, 10:31
Сообщение #13


Частый гость
**

Группа: Новичок
Сообщений: 111
Регистрация: 10-02-07
Из: St.Petersburg, Russia
Пользователь №: 25 241



Цитата(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 и похожие проблемы.

Сообщение отредактировал Kirill Frolov - Nov 1 2007, 10:34


--------------------
[ZX]
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th July 2025 - 20:32
Рейтинг@Mail.ru


Страница сгенерированна за 0.01478 секунд с 7
ELECTRONIX ©2004-2016