Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: avr и at45db161d
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
kostian296
SPCR = (1 << SPE)|(1 <<MSTR)|(1 << CPOL)|(1 << CPHA);
SPSR = (1 << SPI2X); // 2x rate

// initialize PORTB for SPI
DDRB |= (1 << SPI_MOSI)|(1 << SPI_SCK)|(1 << SPI_SS);
DDRB &= ~(1 << SPI_MISO);

void SPI_Write_Byte(unsigned char cool.gif
{
SPDR = b;
while (!(SPSR & (1<<SPIF))); // wait for data transfer to be completed
}

unsigned char SPI_Read_Byte(void)
{
SPDR = 0x00;
while (!(SPSR & (1<<SPIF))); // wait for data transfer to be completed
return SPDR;
}

unsigned char at45ReadVID(void)
{
unsigned char ID;
CS_ON; //óñòàíîâèì CS äëÿ DataFlash
SPI_Write_Byte(0x9f); //ïåðåäàåì íîìåð êîìàíäû
ID=SPI_Read_Byte(); //÷èòàåì ðåãèñòð ñòàòóñà
SPI_Write_Byte(0); //÷èòàåì ðåãèñòð ñòàòóñà
SPI_Write_Byte(0); //÷èòàåì ðåãèñòð ñòàòóñà
SPI_Write_Byte(0); //÷èòàåì ðåãèñòð ñòàòóñà
CS_OFF;; //ñáðîñèì CS äëÿ DataFlash

return(ID);
}

Какие бы скорости не выставлял все время возврщает ID=0 ?
GDI
Ваши комментарии нечитаемы, а зачем 3 раза нули посылаете после чтения ID?

Загляните в тему что вверху форума прикреплена http://electronix.ru/forum/index.php?showtopic=10934 там этих библиотек для датафлеши как собак...

У меня такие функции когда то работали прекрасно
Код
/*****************************************************************************
*
*    Function name : DF_SPI_RW
*
*    Returns :    Byte read from SPI data register (any value)
*
*    Parameters :    Byte to be written to SPI data register (any value)
*
*    Purpose :    Read and writes one byte from/to SPI master
*
******************************************************************************/
unsigned char DF_SPI_RW (unsigned char output)
{
    unsigned char input;
    
    SPDR = output;        //put byte 'output' in SPI data register
    while(!(SPSR & 0x80));    //wait for transfer complete, poll SPIF-flag
    input = SPDR;        //read value in SPI data reg.
    
    return input;        //return the byte clocked in from SPI slave
}        


/*****************************************************************************
*
*    Function name : Read_DF_status
*
*    Returns :    One status byte. Consult Dataflash datasheet for further
*            decoding info
*
*    Parameters :    None
*
*    Purpose :    Status info concerning the Dataflash is busy or not.
*            Status info concerning compare between buffer and flash page
*            Status info concerning size of actual device
*
******************************************************************************/
unsigned char Read_DF_status (void)
{
    unsigned char result, index_copy;
    
    DF_CS_inactive;            //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
    
    return result;                //return the read status register value
}
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.