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

 
 
> AT91SAM7S32 + AT45DB161C, проблемма
Tcom
сообщение Jun 26 2008, 07:49
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 360
Регистрация: 3-01-06
Из: Украина Запорожская обл.
Пользователь №: 12 792



Доброго времени суток!!
Связываю вышеупомянутыеи МС.
Записываю массив в буфер 1 at45, а потом читаю массив с буфера 1.
Почемуто все значения оказываются делёнными на 2.

инициализация SPI:
Код
void initSPI (void)
{
  AT91C_BASE_PIOA->PIO_PDR =  AT91C_PA12_MISO | AT91C_PA13_MOSI | AT91C_PA14_SPCK;
  AT91C_BASE_PIOA->PIO_ASR =  AT91C_PA12_MISO | AT91C_PA13_MOSI | AT91C_PA14_SPCK;
  AT91C_BASE_PIOA->PIO_BSR = 0;
  AT91C_BASE_PMC->PMC_PCER = 1 << AT91C_ID_SPI;

  /****  Fixed mode ****/
  AT91C_BASE_SPI->SPI_CR      = 0x81;              //SPI Enable, Sowtware reset
  AT91C_BASE_SPI->SPI_CR      = 0x01;              //SPI Enable


  //AT91C_BASE_SPI->SPI_MR      = 0xE0011;          //Master mode, fixed select, disable decoder, FDIV=0 (MCK), PCS=1110
  *AT91C_SPI_MR = AT91C_SPI_MODFDIS | AT91C_SPI_PS_FIXED | AT91C_SPI_MSTR | (0x0E<<16);
  AT91C_SPI_CSR[0] = AT91C_SPI_NCPHA|AT91C_SPI_BITS_8|(SPI_SCKDIV<<8);
}


Чтение /запись:
Код
unsigned char spiSendByte(const unsigned char data)
{
     // wait for transmit completion/ready
     while(!(*AT91C_SPI_SR & AT91C_SPI_TDRE));
     // write data to be transmitted
     *AT91C_SPI_TDR = data;
     // wait for completion
     while(!(*AT91C_SPI_SR & AT91C_SPI_RDRF));
     // return received data
     return *AT91C_SPI_RDR;

}
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Tcom
сообщение Jun 26 2008, 08:32
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 360
Регистрация: 3-01-06
Из: Украина Запорожская обл.
Пользователь №: 12 792



Могу предположить что читается правельно
Код
const unsigned char DF_pagebits[]  ={  9,  9,  9,  9,  9,  10,  10,  11};    
unsigned char Read_DF_status (void)
{
    unsigned char result,index_copy;    //make sure to toggle CS signal in order
    DF_CS_active;                //to reset dataflash command decoder
    result = DF_SPI_RW(StatusReg);        //send status register read op-code
    result = DF_SPI_RW(0x00);        //dummy write to get result
    index_copy = ((result & 0x38) >> 3);    //get the size info from status register
    PageBits   = DF_pagebits[index_copy];    //get number of internal page address bits from look-up table
    DF_CS_inactive;    
    return result;                //return the read status register value
}


Пробывал считывать статус регистр всегда получаю 0b11010110
Go to the top of the page
 
+Quote Post

Сообщений в этой теме


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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 19:08
Рейтинг@Mail.ru


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