Пытаюсь считать Manufacturer ID (opcode - 0x9f)
По приему в буфеер оказывается значение 0x1E 0x00 0x00 0x00 (должно быть 0x1F 0x25 0x00 0x00).
Посмотрев осцилом на линии на первый взгляд всё порядке : cs опущен, тактирование идет, опкод заносится и от at45 приходит 0x1E( вместо ожидаемого).
Может кто с таким уже сталкивался , в чём может быть причина такого поведения ?
Инициализация SSP в SPI Mode 0 (P0.15,16,17,18 -- CLK,!CS,MISO,MOSI )
CODE
DataFlashSSP_CFG.CPHA=SSP_CPHA_FIRST;
DataFlashSSP_CFG.CPOL=SSP_CPOL_LO;
DataFlashSSP_CFG.ClockRate=1000000;
DataFlashSSP_CFG.Mode=SSP_MASTER_MODE;
DataFlashSSP_CFG.FrameFormat=SSP_FRAME_SPI;
DataFlashSSP_CFG.Databit = SSP_DATABIT_8;
SSP_ConfigStructInit(&DataFlashSSP_CFG);
SSP_Init(LPC_SSP0, &DataFlashSSP_CFG);
CLKPWR_SetPCLKDiv(CLKPWR_PCLKSEL_SSP0, CLKPWR_PCLKSEL_CCLK_DIV_2);
SSP_Cmd(LPC_SSP0, ENABLE);
/* ждем пока освободится*/
while( LPC_SSP0->SR & SSP_SR_BSY ) { ; }
/* очистка FIFO */
while( LPC_SSP0->SR & SSP_SR_RNE ) {
volatile uint32_t dummy = LPC_SSP0->DR;
(void)dummy;
Чтение Manufacturer ID
CODE
CS(LOW):
delay_us(10);
LPC_SSP0->DR = 0x9f;
while (LPC_SSP0->SR & SSP_SR_BSY ) { ; }
rx_data=LPC_SSP0->DR;
for (i=0;i<4;i++)
{
LPC_SSP0->DR = 0xFF;
while (LPC_SSP0->SR & SSP_SR_BSY ) { ; }
buf[i] = LPC_SSP0->DR;
}
CS(HI);
delay_ms(1);