Easyelectronics.ru

Электроника для всех
Текущее время: 16 дек 2019, 06:54

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/10pcs (Любой цвет!)
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
 Заголовок сообщения: Запись в Serial EEPROM.
СообщениеДобавлено: 12 апр 2016, 15:43 
Старожил

Зарегистрирован: 17 фев 2016, 17:31
Сообщения: 238
Пишу в память.
Код:
void LOGGER_Write(uint32_t address, uint32_t lenght, uint8_t *data)
{
    #if USE_STATUS_REG
   uint32_t busy;   
   #endif
    uint32_t bytes_to_write=0;

    while(lenght)
    {
   if(((address & (PAGE_SIZE - 1)) + lenght) >= PAGE_SIZE)
      bytes_to_write = PAGE_SIZE - (address & (PAGE_SIZE - 1));
   else
          bytes_to_write = lenght;

      // Every write operation demands a write enable!!!
      SPI_CSlow();
      SPI_SendByte(SPIEEPROM_CMD_WREN);
      SPI_CShigh();

      // start write
      SPI_CSlow();
      // send write command
      SPI_SendByte(SPIEEPROM_CMD_WRITE);
      // send address
      SPI_SendByte(address>>8);
      SPI_SendByte(address&0x00FF);

      address += bytes_to_write;
      lenght -= bytes_to_write;

      while(bytes_to_write--)
      {
          // send data to be written
          SPI_SendByte(*data++);
      }
      // stop write
      SPI_CShigh();

        #if USE_STATUS_REG
      busy = 1;
      //wait for write operation to complete
      while(busy)
      {
         busy = (SPIEEPROM_ReadStatus() & SPIEEPROM_STATUS_WIP);
      }
       #else
      //needs 5ms for page write
      Delay_us_sys(5000);
      #endif
   }
}

если выставляю #define USE_STATUS_REG 0 то есть жесткая задержка на 5мс то данные успевают прописаться при переходе на следующую страницу. а если опрашиваю статус бит то нет. есть способ избежать жесткой задержки?

в даташит написано
Код:
tWC (Note 13)   Write Cycle Time    5 ms .

13.tWC is the time from the rising edge of CS after a valid write sequence to the end of the internal write cycle.

получается как ни крути а 5мс нужно ждать?

ввел задержку.
Код:
busy = 1;
//wait for write operation to complete
while(busy)
{
    busy = (SPIEEPROM_ReadStatus() & SPIEEPROM_STATUS_WIP);
    Delay_us(1);
}

теперь все прописывается корректно. очевидно нога слейв селект не успевала отработать в цикле.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Запись в Serial EEPROM.
СообщениеДобавлено: 13 апр 2016, 03:14 
Старожил

Зарегистрирован: 10 окт 2014, 00:48
Сообщения: 6343
jenya77, иногда сигнал BUSY не успевает выставится после команды. Поллинг читает статус, BUSY (пока еще!) не активно - значит Ok! И это вызывает сбой.
Т.е. надо немного подождать и уж затем проверять статус готовности. Относится ли этот bug к данному случаю - проверить то легко. Выдайте команду, а потом проверьте, устанавливается ли BUSY вообще. Если "да", то через сколько? (предполагаю - 0.1-1 us)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Запись в Serial EEPROM.
СообщениеДобавлено: 13 апр 2016, 11:34 
Старожил

Зарегистрирован: 17 фев 2016, 17:31
Сообщения: 238
u37 писал(а):
jenya77, иногда сигнал BUSY не успевает выставится после команды. Поллинг читает статус, BUSY (пока еще!) не активно - значит Ok! И это вызывает сбой.
Т.е. надо немного подождать и уж затем проверять статус готовности. Относится ли этот bug к данному случаю - проверить то легко. Выдайте команду, а потом проверьте, устанавливается ли BUSY вообще. Если "да", то через сколько? (предполагаю - 0.1-1 us)

да задежка 1us помогла. я думаю можно и меньше. спасибо.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB