Артём__ 0 October 7, 2012 Posted October 7, 2012 · Report post Если можно "общаться" через один вывод, то зачем их делают 2? C двумя линиями можно передавать данные в обе стороны одновременно. Quote Share this post Link to post Share on other sites More sharing options...
d7d1cd 0 October 7, 2012 Posted October 7, 2012 (edited) · Report post C двумя линиями можно передавать данные в обе стороны одновременно. Что значит передавать данные в обе стороны одновременно? Edited October 7, 2012 by d7d1cd Quote Share this post Link to post Share on other sites More sharing options...
hash20 0 October 8, 2012 Posted October 8, 2012 · Report post Что значит передавать данные в обе стороны одновременно? Это значит писать и читать данные одновременно. Например читать из RAM и писать в DAC ... вроде как быстрее получиться :) Quote Share this post Link to post Share on other sites More sharing options...
d7d1cd 0 October 8, 2012 Posted October 8, 2012 · Report post Понятно. То есть, в моем случае, я и читаю и записываю данные через пин SI. А делать то же самое через пин SO можно? Quote Share this post Link to post Share on other sites More sharing options...
Артём__ 0 October 8, 2012 Posted October 8, 2012 · Report post То есть, в моем случае, я и читаю и записываю данные через пин SI. А делать то же самое через пин SO можно? Если не используется аппаратный spi и SI и SO объединены, то читать и передавать мастер может через любой из них. Но slave может читать данные только с SI, а передавать в SO. Quote Share this post Link to post Share on other sites More sharing options...
d7d1cd 0 October 9, 2012 Posted October 9, 2012 · Report post Еще есть вопрос. Перед тем как начать процедуру записи, я читаю регистр микросхемы памяти и проверяю там бит WIP, то есть определяю, не занята ли микросхема в настоящий момент записью, заданной ей в предыдущем сеансе. Подскажите, сколько раз следует читать регистр до выдачи ответа о том, что с микросхемой что-то не так? Вдруг микросхема неисправна и бит WIP всегда установлен... Quote Share this post Link to post Share on other sites More sharing options...
rezident 0 October 9, 2012 Posted October 9, 2012 · Report post Понятно. То есть, в моем случае, я и читаю и записываю данные через пин SI. А делать то же самое через пин SO можно? Я не понял, кто и где вас так "нагрузил", но вы ошибаетесь. Причем ошибка уже в нарисованной вами схеме из корневого поста. М/c c интерфейсом SPI имеют раздельные входы и выходы данных. Нельзя прочитать данные через вход м/с SPI EEPROM. Для этого (попеременного чтения/записи) вход и выход данных м/с должны быть как минимум объединены между собой. Так что, в вашей схеме ошибка: а) нет линии связи между объединенными выходами м/с FRAM.EEPROM и каким-либо пином МК и б) поскольку на схеме раздельно объединены входы данных и выходы данных, то следовательно линии записи и чтения данных в МК тоже должны быть раздельными. Quote Share this post Link to post Share on other sites More sharing options...
d7d1cd 0 October 10, 2012 Posted October 10, 2012 (edited) · Report post Я не понял, кто и где вас так "нагрузил", но вы ошибаетесь. Причем ошибка уже в нарисованной вами схеме из корневого поста. М/c c интерфейсом SPI имеют раздельные входы и выходы данных. Нельзя прочитать данные через вход м/с SPI EEPROM. Для этого (попеременного чтения/записи) вход и выход данных м/с должны быть как минимум объединены между собой. Так что, в вашей схеме ошибка: а) нет линии связи между объединенными выходами м/с FRAM.EEPROM и каким-либо пином МК и б) поскольку на схеме раздельно объединены входы данных и выходы данных, то следовательно линии записи и чтения данных в МК тоже должны быть раздельными. Спасибо за указание на ошибку в схеме. Действительно, на самом деле у меня в схеме выходы SI соединены с выходами SO. Я планирую такой алгоритм работы (например чтение байта из м\с): 1. Отправляю в м\с инструкцию на чтение регистра статуса; 2. Читаю регистр статуса; 3. Если бит WIP в регистре статуса равен 1, то перехожу к пункту 2; 4. Отправляю в м\с инструкцию на чтение и адрес чтения; 5. Читаю байт информации Вопрос такой: сколько раз необходимо выполнить цикл 2-3, перед тем, как сообщить, что чтение невозможно? Edited October 10, 2012 by d7d1cd Quote Share this post Link to post Share on other sites More sharing options...
rezident 0 October 10, 2012 Posted October 10, 2012 · Report post Спасибо за указание на ошибку в схеме. Действительно, на самом деле у меня в схеме выходы SI соединены с выходами SO.Тогда не забывайте, что перед чтением данных нужно менять функцию пина МК, переводя его с режима вывода на режим ввода. Вопрос такой: сколько раз необходимо выполнить цикл 2-3, перед тем, как сообщить, что чтение невозможно?Готовность нужна при ожидании окончания записи. В datasheet M95256 указано максимальное время записи - 5мс. Вот в течение этого времени и нужно опрашивать готовность м/с EEPROM. Quote Share this post Link to post Share on other sites More sharing options...
Артём__ 0 October 10, 2012 Posted October 10, 2012 · Report post Вопрос такой: сколько раз необходимо выполнить цикл 2-3, перед тем, как сообщить, что чтение невозможно? Это перестраховка какая-то - память как правило либо работает либо нет. Но если хочется можете секунду-другую задать время ожидания. Но нужно в даташит смотреть, какие там времена. Quote Share this post Link to post Share on other sites More sharing options...
d7d1cd 0 October 10, 2012 Posted October 10, 2012 · Report post Понятно. Еще вопрос возник относительно того, что у меня в м\с вывод SO и SI соединены вместе. Получается, что при получении данных из SO они (данные) одновременно будут воздействовать на SI. Что, если при чтении данных из м\с будет читаться байт 0х05. Ведь в инструкциях м\с это чтение регистра статуса. Прочитав этот байт, м\с одновременно получит команду на выдачу регистра статуса и при дальнейшем тактировании выдаст на SO значение регистра статуса, а не следующий байт из массива данных. Подскажите, если я не прав в своих рассуждениях, то в чем я ошибаюсь? Quote Share this post Link to post Share on other sites More sharing options...
rezident 0 October 10, 2012 Posted October 10, 2012 · Report post Подскажите, если я не прав в своих рассуждениях, то в чем я ошибаюсь?Дык не надо рассуждать, коль имеете всего лишь смутные предположения о том, как все это работает :) Для вас основой должен стать datasheet м/с которую вы применяете. Изучите его досконально - вдоль и поперек, сверху вниз и снизу вверх. Ответы на 90% вопросов найдутся сами в ходе изучения. А вот остальные 10% ищите в других документах или спрашивайте окружающих. Для того, чтобы вы отбросили свои беспокойства советую внимательно рассмотреть в datasheet M95256 временные диаграммы записи и чтения. Там вы можете заметить, что во время приема команды выход EEPROM находится в высокоимпедансном состоянии (Z-состояние) и не оказывает влияние на процесс приема команды. В то же время во время передачи данных самой м/с EEPROM она не чувствительна к входному битовому потоку данных. Конкретно по чтению регистра статуса см. Figure 10. Read Status Register (RDSR) sequence на стр.19. Quote Share this post Link to post Share on other sites More sharing options...
d7d1cd 0 October 11, 2012 Posted October 11, 2012 (edited) · Report post Как я понял, после выбора м\с (Chip Select = 0), она ждет 1 байта инструкции (например, чтение регистра статуса). При дальнейшем тактировании м\с выдает на SO байт регистра статуса. В этот момент ее вход как бы отключен и она не воспринимает команды по SI. Чтобы снова передать инструкцию в м\с необходимо снять выбор с м\с (Chip Select = 1), а затем заново ее выбрать (Chip Select = 0). Хоть это верно? Edited October 11, 2012 by d7d1cd Quote Share this post Link to post Share on other sites More sharing options...
rezident 0 October 11, 2012 Posted October 11, 2012 · Report post Хоть это верно? Да, это верно. SPI синхронный интерфейс. Прием/передача данных в нем происходит синхронно с тактовом сигналом. Но начало/конец битовой последовательности задается отдельным сигналом фреймовой синхронизации. В данной м/с им является CS. Кроме того, CS выполняет вторую функцию выбора кристалла. Пока CS не автивирован, интерфейс м/с индифферентен к входным сигналам. Каждый фрейм начинается с передачи м/с-ме EEPROM кода команды. Следом за командой могут транслироваться данные или данные может выдавать сама м/с EEPROM, если ей была принята соответствующая команда (чтение регистра или чтение данных). При выдаче данных м/с EEPROM уже не воспринимает битовый поток на своем входе до тех пор, пока сигнал фреймовой синхронизации не сигшнализирует ей о начале нового фрейма. Quote Share this post Link to post Share on other sites More sharing options...
d7d1cd 0 October 12, 2012 Posted October 12, 2012 · Report post Нк, слава транзистору! B) Спасибо за помощь. Пока вопросов нет. Приступил к реализации... Quote Share this post Link to post Share on other sites More sharing options...