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

Пример работы с AT25DF641.

Да, именно. (В четвёртом сообщении темы есть пример)

Я его изначально за основу и взял, если честно. Но неопределенность с функциями spi_r8 и spi_w привела в тупик.

Вот сейчас не получается добиться того чтобы прочитать из микросхемы записанный ранее байт.

Функция записи получилась такая:

uint8_t ssp_rw(uint8_t b)
{
    SSP1DR = b;   // передаём
    while ( !(SSP1SR & SSPSR_RNE) );  // ждём пока примется
    return SSP1DR;
}

void at25_command(char cmd)
{
    at25_SSEL_low(AT25_CS);
    ssp_rw(cmd);
}

void at25_write_byte(uint32_t adr, uint8_t data)
{
    at25_command(EE_WREN);
    at25_SSEL_high(AT25_CS);            // toggle CS, necessary for WREN

    at25_command(EE_WRITE);
    ssp_rw(adr >> 16);
    ssp_rw(adr >>  8);
    ssp_rw(adr);
    ssp_rw(data);
    at25_SSEL_high(AT25_CS);
    while (at25_read_status()& SS_WRITING);
}

 

Функция at25_write_byte() вроде отрабатывает без ошибок.

 

Но при чтении этого байта - вместо мною записанного байта возвращается 0xFF

 

Функция чтения:

uint8_t at25_read_byte(uint32_t adr)
{
    uint8_t result;

    at25_command(EE_READ);
    ssp_rw(adr >> 16);
    ssp_rw(adr >> 8);
    ssp_rw(adr);
    result = ssp_rw(0);
    at25_SSEL_high(AT25_CS);
    return result;
}

 

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


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

Да вроде правильно всё... Может, ножка WP случайно на землю попала?

 

ЗЫ. Обратите внимание, пример - для EEPROM, а у вас - FLASH. В EEPROM можно писать данные поверх старых значений, а FLASH надо стирать перед записью.

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


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

Да вроде правильно всё... Может, ножка WP случайно на землю попала?

это нет. у нас WP аппаратно висит на 3.3V

ЗЫ. Обратите внимание, пример - для EEPROM, а у вас - FLASH. В EEPROM можно писать данные поверх старых значений, а FLASH надо стирать перед записью.

Вот как у меня выполняется:

...
at25_erase_4kb(0);
at25_write_byte(0,22);
read_byte = at25_read_byte(0);

...

void at25_erase_4kb(uint32_t adr)
{
    at25_command(EE_WREN);
    at25_SSEL_high(AT25_CS);            // toggle CS, necessary for WREN

    at25_command(EE_ERASE4); // 0х20
    ssp_rw(adr >> 16);
    ssp_rw(adr >>  8);
    ssp_rw(adr);
    at25_SSEL_high(AT25_CS);
    while (at25_read_status()& SS_WRITING);
}

 

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


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

Не вижу ошибок. Unprotect Sector - вряд ли. Global Protect/Unprotect - тем более.

Остаётся посмотреть осциллографом, может всё-таки функция ssp_rw() как-то не так работает. (Или дождаться того, кто работал с LPC2468)

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


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

Не вижу ошибок. Unprotect Sector - вряд ли. Global Protect/Unprotect - тем более.

Остаётся посмотреть осциллографом, может всё-таки функция ssp_rw() как-то не так работает. (Или дождаться того, кто работал с LPC2468)

AHTOXA, ты прав. Sector Protect Register выдал мне 0xFF - сектор защищен. Unprotect Sector помог. Спасибо тебе огромное.

 

Добавленные функции:

 

uint8_t at25_read_protect_register(uint32_t adr)
{
uint8_t result;
    at25_command(EE_RDPR);
    ssp_rw(adr >> 16);
    ssp_rw(adr >> 8);
    result = ssp_rw(adr);
    result = ssp_rw(0);
    at25_SSEL_high(AT25_CS);
    return result;
}

void at25_Unprotect_Sector(uint32_t adr)
{
    at25_command(EE_WREN);
    at25_SSEL_high(AT25_CS);            // toggle CS, necessary for WREN

    at25_command(EE_UNPROTECT);
    ssp_rw(adr >> 16);
    ssp_rw(adr >>  8);
    ssp_rw(adr);
    at25_SSEL_high(AT25_CS);
    while (at25_read_status()& SS_WRITING);
}

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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