Я ищу небольшое устройство объемом 32 КБ SRAM, которое два MCU могут читать или записывать (в разное время; мне не нужно одновременное чтение / запись). Было бы хорошо, если бы он также использовал последовательный интерфейс.
Проблема, которую я пытаюсь решить, - это отправка данных между двумя устройствами, чтобы другое устройство не делало паузу, чтобы получить это. Я бы перенес аудиосэмпл в буфер, затем другой чип при необходимости считывал звук и что-то делал с ним.
Я обнаружил, что серийные SRAM похожи на микрочипы 23A256 / 23K256, однако, похоже, что они имеют один последовательный интерфейс. Есть ли способ получить доступ к двум чипам?
Кроме того, принимающее устройство имеет только 2 КБ свободной памяти данных (максимум), поэтому похоже, что использование DMA или какого-либо подобного механизма передачи через I2C или другой интерфейс не будет работать.
Самый простой способ - реализовать шину SPI с несколькими мастерами. Вы можете использовать две дополнительные линии ввода / вывода между мастерами для арбитража, используя механизм квитирования.
источник
Я вижу два возможных решения вашей проблемы:
1) Найдите чип FIFO, который соответствует вашим потребностям (один пример ). Это может быть непросто / невозможно использовать, поскольку я не знаю, существует ли чип FIFO с простым интерфейсом (например, SPI). Я знаю, что FIFO имеют параллельный интерфейс.
2) Поделитесь упомянутой SRAM от Microchip с двумя мастерами SPI (в двух uController). Когда первый используется, порты SPI в другом uController должны быть с высоким импедансом и наоборот, когда второй uController будет использовать SRAM. Вам понадобится простой интерфейс рукопожатия между uControllers (что-то вроде запроса на чтение / чтения / занятых строк). Это может быть реализовано с использованием 2 или 3 однонаправленных соединений между uControllers. Ваше воображение это предел.
источник
Между прочим, один подход, еще не упомянутый для использования с параллельными запоминающими устройствами, состоит в том, чтобы двум или более устройствам были предоставлены фиксированные временные интервалы для доступа к данным. Этот подход использовался во многих компьютерах на базе 6502, выпущенных как Apple, Commodore, так и некоторыми другими поставщиками (не интересно, Atari). Популярный микропроцессор 6502 использовал двухфазные часы и всегда выполнял свои обращения к памяти во второй половине каждого цикла (адрес был доступен в течение первой половины, но данные записывались во второй половине или фиксировались в конце вторая половина). Таким образом, компьютеры Apple и Commodore в течение первой половины каждого цикла памяти будут использовать адрес, сгенерированный видео схемой, фиксируя данные в конце половины; во второй половине каждого цикла они будут использовать адрес, сгенерированный процессором,
Этот подход требовал, чтобы память была в два раза быстрее, чем требовалось бы без чередования памяти, и требовал добавления драйверов с 3 состояниями на адресные выходы процессора (адресные выходы 6502 всегда вели на высокий или низкий уровень), но в остальном он работал очень плавно сделать одну и ту же память доступной как для процессора, так и для внешних схем.
источник
Есть несколько способов сделать то, что вы хотите.
источник