Здравствуйте! Не буду создавать новую тему, спрошу тут:
У меня LPC2468 и микросхема AT25DF321A подключенная по SSP1.
Пытаюсь заставить ее работать, но не в какую (не могу даже получить Manufacture ID, приходит в ответ или 0x00 или 0xFF). Уже перекурил даташиты несколько раз (и на контроллер и на память).
Инициализация SSP1
Код
DWORD SSP1Init( void )
{
BYTE i, Dummy=Dummy;
PCONP |= (1 << 10); // PCSSP1
PCLKSEL0 |= (1 << 20); // Peripheral Clock Selection for SSP1 <3=> Pclk = Cclk
PINSEL9 &= ~(3 << 10); // Set SSEL to GPIO pin
PINSEL9 |= (3 << 8) | (3 << 12) | (3 << 14); // P4.20 - SCK1, P4.22 - MISO1, P4.23 - MOSI1
FPIN_AS_OUTPUT_(4,21);
FPIN_SET_(4,21);
SSP1CR0 = 0x0707;//(7 << 0) | (1 << 6) | (1 << 7) | (1 << 8);//0x0707; // Set DSS data to 8-bit, Frame format SPI, CPOL = 0, CPHA = 0, and SCR is 15
SSP1CPSR = 0x02;
for ( i = 0; i < FIFOSIZE; i++ )
{Dummy = SSP1DR;} // clear the RxFIFO
SSP1CR1 = SSPCR1_SSE; // Device select as master, SSP Enabled
return( TRUE );
}
Теперь сам код запроса:
Код
volatile int Flash1_ManID,Flash1_MemType1,Flash1_MemType2,Flash1_MemSize = 0;
void Flash1_ReadType(void)
{
FPIN_CLR_(4,21);
SSP1DR = 0x9F;
while ( !(SSP1SR & SSPSR_BSY) ); // SSPSR_TFE SSPSR_RNE
Flash1_ManID = SSP1DR;
Flash1_MemType1 = SSP1DR;
Flash1_MemType2 = SSP1DR;
Flash1_MemSize = SSP1DR;
FPIN_SET_(4,21);
}
В итоге из SSP1DR идут одни нули...(изредка один из байтов - 0xFF)
Вначале думал что проблема в скорости - перебирал в регистре SSP1CR0 значения: 0x0107, 0x0707, 0x0007; перебирал значения в регистре SSP1CPSR: 0x01 до 0x40
Но с другой стороны AT25DF321A работает до 100 МГц, а у меня максимум что получалось - 18МГц (Master Clock в окне отладки Keil)
Уперся в эту хрень и уже 2 дня не могу ничего сделать...
Где же я ошибся?
Добавлено: Проверяю на осциллографе - SCK работает - четко 8 тактов. Но на MISO - тишина...