Перейти к содержанию
    

AT91SAM7 SPI не работает как надо

Пытаюсь связать флэш память и контроллер по SPI. Настраиваю SPI так:

// использую стандартные атмеловские либы для этого контроллера

	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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В этом процессоре регистры, запись в которые переключает какие-либо биты (пары 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Их раньше небыло. Без них все так же. Заметил что на линии MOSI такая же каша с сигналами.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вынесите работу с pio и инициализацию spi из цикла. В цикле только выдачу данных на spi оставьте.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Отключите пока все от SCK - никаких средних уровней и "лесенок" во время передачи средствами процессора сделать нельзя. И попробуйте поболтать этим выводом через PIO. Может, транзистор нижний убили.

...Или верхний, что более подходит под симптомы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

По симптомам - две ноги (соседних обычно) сцепились друг с другом при пайке.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...