|
|
  |
AT91SAM7X256 & SPI, Крыша едет не знаю что делать |
|
|
|
Oct 26 2007, 06:17
|
Участник

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

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

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

|
Цитата(Dron_Gus @ Oct 26 2007, 09:24)  У 161 может быть разный размер страницы 512/528 байт. Это понятно. Ничего не менял, оставил по умолчанию 528. Просто суть в том, что в некоторый момент считываются просто 0xFF в случайном месте. Более того, только что обнаружил, что при записи строго структурированных данных (скажем, несколько одинаковых строк в сектор) все проходит на ура. Проблема именно с неструктурированными данными. При записи данных в сектор через rand() сбой может произойти даже после 2-3 секторов!
--------------------
Сомневаюсь, и вам советую!
|
|
|
|
|
Oct 26 2007, 10:54
|
Участник

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

|
Включение CSAAT (чтобы не отпускал CS) позволяет добиться устойчивого чтения, но запись ессно перестает работать... Ну неужели никто не сталкивался с dataflash + sam7x?
--------------------
Сомневаюсь, и вам советую!
|
|
|
|
|
Oct 26 2007, 11:17
|
Участник

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

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

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

|
Да, оказалось, разводка. Слишком близко кварц и дорожка CS. Максимальная скорость 1 мбит если, то все работает... Сразу не подумал, а жаль. Сколько бы времени сэкономил!
--------------------
Сомневаюсь, и вам советую!
|
|
|
|
|
Oct 30 2007, 12:50
|
Участник

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

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

Группа: Участник
Сообщений: 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 всё вдруг заработало... Я так понимаю, что дело исключительно в at45db161 и только...
--------------------
Сомневаюсь, и вам советую!
|
|
|
|
|
Nov 1 2007, 10:31
|

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

|
Цитата(mungo @ Oct 31 2007, 14:16)  Странно, но при DLYBS=7 всё вдруг заработало... Я так понимаю, что дело исключительно в at45db161 и только... Для AT91SAM7S очень помогло установить DLYBCT в 1 вместо 0 (т.е. 32*DLYBCT/MCK -- т.е. ввести 32 такта MCU паузы между передачей каждого байта). До того -- разные глюки с разными карточками и разными MCU (взятыми, предположительно, из одной коробки, в одинаковых платах)... PS: да, речь вообще про SD-карты. MMC работали хорошо и так. Плохо прочитал и бросился отвечать. Но тоже SPI и похожие проблемы.
Сообщение отредактировал Kirill Frolov - Nov 1 2007, 10:34
--------------------
[ZX]
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|