STM32F407Z FSMC SRAM 16 бит побайтная запись
Всем привет. К контроллеру STM32F407ZE через FSMC подключена статическая память 256к х 16бит, сигналы UB и LB подключены, в настройках CubeMX FSMC опция "Byte enable" включена. Чтение-запись по 16 бит работает нормально.
Сейчас, если записать несколько значений ( 45, 67, 89, AB ) последовательно по адресам 0000, 0001, 0002, 0003, при чтении всё нормально:
0x0000: 45
0x0001: 67
0x0002: 89
0x0003: AB
Но если после записи по адресу 0003 сделать запись другого значения, например, 0x34, то портится содержимое по адресу 0002:
0x0000: 45
0x0001: 34
0x0002: 00
0x0003: AB
Можно ли делать побайтную (8 бит) запись и чтение? Если функцию побайтного чтения можно организовать, анализируя нулевой бит адреса и используя сдвиг, то для функции записи я, пока что, вижу только вариант "чтение-модификация-запись". Можно использовать, конечно, но при этом будут совершаться лишние действия и при записи будет падать производительность.
Есть ли более правильные методы организации побайтного обмена с внешней памятью?
Проблема решена - нужно было использовать 8-битный указатель. Возможно, информация кому-нибудь пригодится.
Функции чтения и записи байтов:
#define EXT_SRAM_BASE_ADDRESS 0x68000000
void ext_sram_write_byte(uint32_t address, uint8_t data)
{
*(uint8_t *) (EXT_SRAM_BASE_ADDRESS + (address) ) = data;
}
uint8_t ext_sram_read_byte(uint32_t address)
{
return *(uint8_t *)(EXT_SRAM_BASE_ADDRESS + address);
}
Последний раз редактировалось AlexBel; 28.01.2020 в 18:30.
|