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

BF527 + AT45DB041D

Пишет (или читает?) со смещением адреса -1. Не понимаю почему. Значение 0xAA, записанное по адресу 0x02 читается по адресу 0x01.

Чтение 0 страницы во 2 буфер:

void AT45_Mem_to_Buf2(void) // считать страницу из памяти во 2 буфер
{
    volatile int n;
    unsigned char MEM_status;

    SetupSPI( (COMMON_SPI_SETTINGS|TIMOD01) );
    
    *pSPI_TDBR = 0x55;  
    Wait_For_SPIF();
    *pSPI_TDBR = 0x00; 
    Wait_For_SPIF();
    *pSPI_TDBR = 0x00;  
    Wait_For_SPIF();
    *pSPI_TDBR = 0x00;  
    Wait_For_SPIF();

    //The SPI will be turned off
    SPI_OFF();

    //Pause before continuing
    for(n=0; n<DELAY; n++)
    {
        asm("nop;");
    }
    
    do  
  {
    MEM_status = AT45_Status();  // ожидание готовности памяти
  } while (!(MEM_status & 0x80));    

}

 

Запись во 2 буфер по адресу 0x02 значения 0xAA

void AT45_Buf2_Write(void) // модификация 2 буфера
{
    volatile int n;

    //turns on the SPI in single write mode
    SetupSPI( (COMMON_SPI_SETTINGS|TIMOD01) );

    *pSPI_TDBR = 0x87;  // buf 2
    Wait_For_SPIF();
    *pSPI_TDBR = 0x00; 
    Wait_For_SPIF();
    *pSPI_TDBR = 0x00;  
    Wait_For_SPIF();
    *pSPI_TDBR = 0x02;  // adr
    Wait_For_SPIF();    
    *pSPI_TDBR = 0xAA;  // data
    Wait_For_SPIF();    

    //The SPI will be turned off
    SPI_OFF();

    //Pause before continuing
    for(n=0; n<DELAY; n++)
    {
        asm("nop;");
    }
    
}

 

Запись 2 буфера в память

void AT45_Buf2_to_Mem(void) // запись 2 буфера в память
{
    volatile int n;
        unsigned char MEM_status;
    //turns on the SPI in single write mode
    SetupSPI( (COMMON_SPI_SETTINGS|TIMOD01) );

    *pSPI_TDBR = 0x86;  // buf 2
    Wait_For_SPIF();
    *pSPI_TDBR = 0x00;  
    Wait_For_SPIF();
    *pSPI_TDBR = 0x00;  
    Wait_For_SPIF();
    *pSPI_TDBR = 0x00;  
    Wait_For_SPIF();

    //The SPI will be turned off
    SPI_OFF();

    //Pause before continuing
    for(n=0; n<DELAY; n++)
    {
        asm("nop;");
    }
    
    do  
  {
    MEM_status = AT45_Status();  // ожидание готовности памяти
  } while (!(MEM_status & 0x80));

}

 

Чтение 0 страницы через 1 буфер

void AT45_Mem_to_Buf1(void) // считать страницу из памяти в 1 буфер
{
    volatile int n;
    unsigned char MEM_status;

    SetupSPI( (COMMON_SPI_SETTINGS|TIMOD01) );
    
    *pSPI_TDBR = 0x53;  // buf 1
    Wait_For_SPIF();
    *pSPI_TDBR = 0x00;  
    Wait_For_SPIF();
    *pSPI_TDBR = 0x00;  
    Wait_For_SPIF();
    *pSPI_TDBR = 0x00;  
    Wait_For_SPIF();

    //The SPI will be turned off
    SPI_OFF();

    //Pause before continuing
    for(n=0; n<DELAY; n++)
    {
        asm("nop;");
    }
    
    do  
  {
    MEM_status = AT45_Status();  // ожидание готовности памяти
  } while (!(MEM_status & 0x80));    

}

 

Чтение из 1 буфера по адресу 0x01

unsigned char AT45_Buf1_Read(void) // чтение из 1 буфера
{
    volatile int n;
    unsigned char spi_dat;
    unsigned long  ulDummyRead, ulDummyWrite=0;    
    unsigned char MEM_status;

    SetupSPI( (COMMON_SPI_SETTINGS|TIMOD01) );
    
    *pSPI_TDBR = 0xD1;  // buf 1
    Wait_For_SPIF();
    *pSPI_TDBR = 0x00;  
    Wait_For_SPIF();
    *pSPI_TDBR = 0x00;  
    Wait_For_SPIF();
    *pSPI_TDBR = 0x01;  // adr
    Wait_For_SPIF();
    *pSPI_TDBR = 0x00;  // 1 Dummy Byte
    Wait_For_SPIF();    

    ulDummyRead  = *pSPI_RDBR;
    Wait_For_SPIF();
                                
    *pSPI_TDBR = ulDummyWrite;
    Wait_For_SPIF();
    spi_dat =  *pSPI_RDBR;

    //The SPI will be turned off
    SPI_OFF();

    //Pause before continuing
    for(n=0; n<DELAY; n++)
    {
        asm("nop;");
    }
    
    do  
  {
    MEM_status = AT45_Status();  // ожидание готовности памяти
  } while (!(MEM_status & 0x80));    
  
  return spi_dat;

}

 

PS Если есть у кого драйвер для загрузки программы в эту флеш или примеры работы с ней, скиньте на 0x05собакаmail.ru

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


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

А зачем такая экзотика с частичными адресами? Почему не воспользоваться для чтения командой с кодом 0x03?

 

Пример работы с этой флэш памятью есть, (но вне BF527).

https://188.134.5.254/export/2746/hfreceiver/trunk/tests.c - начиная со строки 4006

 

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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