Как мы можем прочитать 4 байта с помощью микроконтроллера и связи SPI

Я хочу передать и получить данные с моего микроконтроллера на мой чип памяти SPI с 4 байтами (256 октетов), я разработал свой код ниже, я хочу написать несколько байтов, затем прочитать их из функции чтения, но я получаю другое значение в 4 байта (например, я отправляю 0x10011111, я получаю A100A1F0)

В таблице данных микросхемы памяти нет информации о передаче страницы (256 бит), и передача данных всегда выполняется в двухбайтовом формате (1 слово = 16 бит).

это мой код для записи 4 байта:

  void ecrire4OctetsFRAM(uint32_t const addressRegister, uint32_t const fourBytes, uint8_t const slaAddress)
{
if (fourBytes != lire4OctetsFRAM(addressRegister, slaAddress))
{
if(addressRegister%4)
{
ecrire1OctetFRAM(addressRegister+3,(uint32_t) (fourBytes>> 24),FRAM);
ecrire1OctetFRAM(addressRegister+2,(uint32_t) (fourBytes>> 16),FRAM);
ecrire1OctetFRAM(addressRegister+1,(uint32_t) (fourBytes>> 8),FRAM);
ecrire1OctetFRAM(addressRegister,  (uint32_t) (fourBytes)    ,FRAM);}
else
{
uint8_t tries(0);
do
{
error = 0;
positionnerPointeur(addressRegister, slaAddress);
if (error) continue;
transfer((uint8_t) (fourBytes));
if (error) continue;
transfer((uint8_t) (fourBytes>> 8));
if (error) continue;
transfer((uint8_t) (fourBytes>>16));
if (error) continue;
transfer((uint8_t) (fourBytes>>24));
release();
} while (error && ++tries < MAX_TRIES);
error = (tries >= MAX_TRIES)? TW_MAX_TRIES: error;
}
}
}

и это для чтения

uint32_t    lire4OctetsFRAM  (uint32_t const addressregister, uint8_t const slaveadress ){uint32_t fourBytes(0);
uint8_t tries(0);
//**
do
{   error = 0;
positionnerPointeur(addressregister, slaveadress);
select();
transfer(READ);

fourBytes = transfer((uint32_t) ((addressregister >>  24) & 0xFFFF));
fourBytes += transfer((uint32_t) ((addressregister >> 16) & 0xFF));
fourBytes += transfer((uint32_t) ((addressregister >>   8) & 0xFF));

fourBytes +=transfer((uint32_t) ( addressregister & 0xFF));
transfer(0);
fourBytes = SPDR;
fourBytes += (fourBytes << 24) ;
fourBytes += (fourBytes << 16);
fourBytes = (fourBytes <<  8);
transfer(0);
fourBytes += SPDR;
release();
}
while (error && ++tries < MAX_TRIES);
error = (tries >= MAX_TRIES)? TW_MAX_TRIES: error;
return fourBytes ;
}

Positionnerpointeur — это функция для указания адреса бита (указатель).

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector