Чтение памяти FMC NAND с той же скоростью, что и запись. СТМ32Х7
При записи по адресу FMC NAND FMC_NCE становится низким в начале первой записи, а затем становится высоким только в конце последней записи. Я могу записать 0x1000 слов на частоте 10 МГц, используя тактовую частоту ядра FMC 60 МГц. Следовательно, при минимальном времени НАСТРОЙКИ, ОЖИДАНИЯ и УДЕРЖАНИЯ для записи слова требуется 6 тактов ядра.
При чтении FMC_NCE становится низким, а затем высоким с каждым прочитанным словом. Это увеличивает время чтения между каждым словом, требуя дополнительных тактов ядра FMC, что означает, что часы ядра работают с более высокой частотой. Более высокие часы ядра имеют дополнительный недостаток, заключающийся в непостоянстве количества тактовых циклов между операциями чтения. При тактовой частоте ядра FMC 160 МГц чтение иногда занимает 16, 15 или 17 тактов. Если я использую MDMA для чтения, то я могу читать несколько слов за раз без снижения значения FMC_NCE и использования минимум 6 тактов ядра, но это ограничено кешем MDMA и делает только небольшие всплески. Со временем мне нужно будет прочитать 10000 слов за один раз.
На самом деле я не использую чип памяти NAND, а использую FMC в качестве параллельного интерфейса, поэтому мне нужно быть последовательным, в частности, с частотой чтения.
НАПИСАТЬ код:
for (index = 0U; index < BUFFER_SIZE; index++)
{
*(__IO uint16_t *)deviceAddress = *buff;
buff++;
}
ЧИТАЕМЫЙ код:
for (index = 0U; index < BUFFER_SIZE; index++)
{
*buff = *(__IO uint16_t *)(deviceAddress);
buff++;
}
Каким-то образом периферийное устройство знает, что запись выполняется за один раз, а чтение — нет?
Я установил MPU на TEX2 и включил i- и d-cache.
Буду очень признателен за любые идеи