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

 
 
 
Reply to this topicStart new topic
> AT91SAM7 SPI не работает как надо
MegaFPGA
сообщение Jun 8 2010, 03:40
Сообщение #1


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

Группа: Участник
Сообщений: 75
Регистрация: 12-11-09
Из: Уфа
Пользователь №: 53 567



Пытаюсь связать флэш память и контроллер по SPI. Настраиваю SPI так:
// использую стандартные атмеловские либы для этого контроллера
CODE
while(1){ AT91F_PIO_CfgPeriph(
AT91C_BASE_PIOA, // PIO controller base address
((unsigned int) AT91C_PA13_MOSI ) |
((unsigned int) AT91C_PA31_NPCS1 ) |
((unsigned int) AT91C_PA14_SPCK ) |
//((unsigned int) AT91C_PA11_NPCS0 ) |
((unsigned int) AT91C_PA12_MISO ), // Peripheral A
//((unsigned int) AT91C_PA9_NPCS1 ) |
//((unsigned int) AT91C_PA22_NPCS3 ) |
//((unsigned int) AT91C_PA3_NPCS3 ) |
//((unsigned int) AT91C_PA5_NPCS3 ) |
//((unsigned int) AT91C_PA10_NPCS2 ) |
((unsigned int) AT91C_PA30_NPCS2 )); // Peripheral B
AT91F_SPI_CfgPMC ();
AT91F_SPI_SWReset (AT91C_BASE_SPI);
pSPI ->SPI_CR = (unsigned int)0x01;
pSPI ->SPI_MR = (unsigned int)0x30011;
pSPI ->SPI_IER =(unsigned int) 0x0;// все прерывания отключены
pSPI ->SPI_IDR = (unsigned int)0x3FF;// все прерывания отключены
pSPI ->SPI_IMR = (unsigned int)0x0;// все прерывания замаскированы
pSPI ->SPI_CSR[2] = (unsigned int)0x0000FF02;
pPIO->PIO_PPUDR=(pPIO->PIO_PPUDR)&0xFFFFBFFF;
pPIO->PIO_PPUER=(pPIO->PIO_PPUER)|0x400;

Передачу запускаю записью в регистр данных SPI данных.
pSPI ->SPI_TDR= SPIDataToSend;
Потом жду флаг окончания передачи

Зацикливаю передачу.
Осциллографом смотрю сигнал SCK. Сначала после настройки SPI он падает до 1.7 В. Потом когда начинается передача он приобретает форму лестницы. 0В - 1,7В - 3,3В - 0В-1,7В - 3,3В-1,7В-3,3-1,7В-3,3-1,7В.
Пробовал различные частоты. Пробовал различные настройки режимов. Пробовал внутр. подтяжку. Пробовал внешнюю подтяжку. Результат один и тот же.
хелп.

Сообщение отредактировал MegaFPGA - Jun 8 2010, 03:46
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение Jun 8 2010, 04:32
Сообщение #2


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

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



В этом процессоре регистры, запись в которые переключает какие-либо биты (пары enable/disable, set/clear) только для записи. Читать из них ничего не стоит.
С push-pool регистром ничего делать не надо для начала. Если только не 5 вольт интерфейс. В этом случае только нужные битики в disable push-pool register пишите:
PIO_PPUDR = AT91C_PA14_SPCK | AT91C_PA13_MOSI;
PIO_PPUDR = AT91C_PA14_SPCK | AT91C_PA13_MOSI;
И отключаете внутренний pull-up резистор:
PIO_PUDR = AT91C_PA14_SPCK | AT91C_PA13_MOSI;

битики добавить по вкусу....


А в Вашем коде - удалите две строчки манипуляций с Push-pool register.

Сообщение отредактировал Genadi Zawidowski - Jun 8 2010, 04:52
Go to the top of the page
 
+Quote Post
MegaFPGA
сообщение Jun 8 2010, 04:47
Сообщение #3


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

Группа: Участник
Сообщений: 75
Регистрация: 12-11-09
Из: Уфа
Пользователь №: 53 567



Их раньше небыло. Без них все так же. Заметил что на линии MOSI такая же каша с сигналами.
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение Jun 8 2010, 04:50
Сообщение #4


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

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



Вынесите работу с pio и инициализацию spi из цикла. В цикле только выдачу данных на spi оставьте.
Go to the top of the page
 
+Quote Post
MegaFPGA
сообщение Jun 8 2010, 05:20
Сообщение #5


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

Группа: Участник
Сообщений: 75
Регистрация: 12-11-09
Из: Уфа
Пользователь №: 53 567



Вынес. Ни чего не изменилось.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jun 8 2010, 05:48
Сообщение #6


Гуру
******

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



Отключите пока все от SCK - никаких средних уровней и "лесенок" во время передачи средствами процессора сделать нельзя. И попробуйте поболтать этим выводом через PIO. Может, транзистор нижний убили.
...Или верхний, что более подходит под симптомы.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jun 8 2010, 07:37
Сообщение #7


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



По симптомам - две ноги (соседних обычно) сцепились друг с другом при пайке.
Go to the top of the page
 
+Quote Post
MegaFPGA
сообщение Jun 8 2010, 08:49
Сообщение #8


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

Группа: Участник
Сообщений: 75
Регистрация: 12-11-09
Из: Уфа
Пользователь №: 53 567



Всем спасибо. Оказалось сопля между MOSI и SCK smile.gif
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 09:51
Рейтинг@Mail.ru


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