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

 
 
> Запись в Serial EEprom.
Jenya7
сообщение Apr 11 2016, 13:01
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Записывая в память нужно следить чтобы не перейти страницу.
Код
#define USE_STATUS_REG 0   //doesn't help any way

void LOGGER_PageWrite(uint32_t address, uint32_t length, uint8_t *buffer)
{
    #if USE_STATUS_REG
    uint32_t timer;
    #endif
    volatile uint32_t page_limit=0;
    volatile uint32_t bytes_to_fit=0;
    volatile uint32_t bytes_to_write=0;

    //find a page limit for the address
    while (address > page_limit)
    {
        page_limit += 64;
    }
    //actual page limit
    page_limit--;

    bytes_to_fit = page_limit - address;
    bytes_to_write = bytes_to_fit;

    // Note!!!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);
    while(bytes_to_write--)
    {
        // send data to be written
         SPI_SendByte(*buffer++);
    }
    // stop write
    SPI_CShigh();

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

    if (bytes_to_fit <= length)
    {
        address += bytes_to_fit+1;
        bytes_to_write = length - bytes_to_fit;

         // Note!!!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&0xFF);
        while(bytes_to_write--)
        {
            // send data to be written
            SPI_SendByte(*buffer++);
        }
        // stop write
        SPI_CShigh();

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

проверяю. пишу по середине большое количество байт чтоб перейти на другую страницу.
Код
uint8_t rxbuffer[50];
for (int i=0; i < 50; i++)
{
    rxbuffer[i] = i+1;
}
LOGGER_PageWrite(80, 50, rxbuffer);

и потом считываю.
Код
uint8_t txbuffer[50];
LOGGER_Read(80, 50,txbuffer);

результаты такие:
в адрессе 80-127 я вижу данные 1-47 и это правильно
в адрессе 128-130 я вижу /0, 48, 49

то есть первый адресс следующей страницы не прописывается. целый день бьюсь над проблемой не могу понять в чем дело.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Jenya7   Запись в Serial EEprom.   Apr 11 2016, 13:01
- - aaarrr   Какой-то ужас, если честно. Кодvoid eep_write...   Apr 11 2016, 20:26
|- - jcxz   Цитата(aaarrr @ Apr 12 2016, 02:26) Какой...   Apr 12 2016, 07:07
- - Jenya7   я извиняюсь немного непонятно это Кодdata += a; ad...   Apr 12 2016, 07:03
|- - aaarrr   Цитата(Jenya7 @ Apr 12 2016, 10:03) я изв...   Apr 12 2016, 07:09
- - Jenya7   большое спасибо так работает. причем тестироват...   Apr 12 2016, 07:25
|- - aaarrr   Цитата(Jenya7 @ Apr 12 2016, 10:25) нужно...   Apr 12 2016, 07:53
|- - jcxz   Цитата(aaarrr @ Apr 12 2016, 13:53) Может...   Apr 12 2016, 08:16
|- - aaarrr   Цитата(jcxz @ Apr 12 2016, 11:16) А зачем...   Apr 12 2016, 08:26
|- - jcxz   Цитата(aaarrr @ Apr 12 2016, 14:26) Выход...   Apr 12 2016, 08:59
|- - Jenya7   Цитата(jcxz @ Apr 12 2016, 14:59) Да, а п...   Apr 12 2016, 09:08
|- - jcxz   Цитата(Jenya7 @ Apr 12 2016, 15:05) это у...   Apr 12 2016, 09:16
|- - Jenya7   Цитата(jcxz @ Apr 12 2016, 15:16) Так а к...   Apr 12 2016, 09:21
- - esaulenka   ЦитатаСуд. Бракоразводный процесс. Судья спрашивае...   Apr 12 2016, 08:05
- - Jenya7   таймаут нужен чтоб не застрять навсегда в цикле. у...   Apr 12 2016, 08:27
|- - aaarrr   Цитата(Jenya7 @ Apr 12 2016, 11:27) тайма...   Apr 12 2016, 08:39
|- - Jenya7   Цитата(aaarrr @ Apr 12 2016, 14:39) Вот д...   Apr 12 2016, 08:48
|- - aaarrr   Цитата(Jenya7 @ Apr 12 2016, 11:48) у мен...   Apr 12 2016, 08:51
||- - Jenya7   Цитата(aaarrr @ Apr 12 2016, 14:51) А смы...   Apr 12 2016, 09:00
||- - aaarrr   Цитата(Jenya7 @ Apr 12 2016, 12:00) ничег...   Apr 12 2016, 09:50
||- - jcxz   Цитата(aaarrr @ Apr 12 2016, 15:50) Взял ...   Apr 12 2016, 09:59
||- - Jenya7   Цитата(aaarrr @ Apr 12 2016, 15:50) Взял ...   Apr 12 2016, 10:02
||- - aaarrr   Цитата(Jenya7 @ Apr 12 2016, 13:02) моя с...   Apr 12 2016, 13:10
||- - jcxz   Цитата(Jenya7 @ Apr 12 2016, 16:02) получ...   Apr 12 2016, 13:53
|- - jcxz   Цитата(Jenya7 @ Apr 12 2016, 14:48) но ес...   Apr 12 2016, 09:03
- - Jenya7   чобы было легче дебагировать я немного переделал о...   Apr 12 2016, 13:36
- - Jenya7   ввел задержку. Кодbusy = 1; //wait for write oper...   Apr 12 2016, 14:18
- - aaarrr   Цитата(Jenya7 @ Apr 12 2016, 17:18) что и...   Apr 12 2016, 14:45
- - jcxz   Цитата(Jenya7 @ Apr 12 2016, 20:18) ввел ...   Apr 13 2016, 05:46
- - Jenya7   Цитата(jcxz @ Apr 13 2016, 11:46) Я Вам н...   Apr 13 2016, 06:29
- - jcxz   Цитата(Jenya7 @ Apr 13 2016, 12:29) бит 0...   Apr 13 2016, 06:33
- - Jenya7   Цитата(jcxz @ Apr 13 2016, 12:33) Откройт...   Apr 13 2016, 06:50
- - aaarrr   Цитата(Jenya7 @ Apr 13 2016, 09:50) непон...   Apr 13 2016, 16:41
- - jcxz   Автор совершенно не желает читать даташит.....   Apr 13 2016, 17:01


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

 


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


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