Здравствуйте! Прошу помощи, т.к. озадачило отсутвтвие практических данных в соответствующей литературе. Короче у меня есть EEPROM микруха Atmel AT93C66A. Она четырьмя контактами (CS, SK, DI, DO) подведена к интеловскому эзернет контроллеру 82546GB, который использует её для хранения прошивки. У этого контроллера есть регистр, 4 бита которого выведены на эти 4 провода. Эти биты там таки называются (CS, SK, DI, DO). Прочитав весь интеловский даташит по этому контроллеру и даташит по самой микрухе Атмел я вроде бы всё понял, но при этом осталас куча чисто практических непоняток: на пример вот если я хочу прочесть одино слово из епрома, то я должен что? выставить в бит CS 1, а потом в DI согласно протоколу передачи пихать побитно адрес ячейки, которую хочу прочесть, и сразу после этого читать побитно из DO значение ячейки? Зачем тогда нужен сигнал SK ? и нужно ли мне постоянно поддерживать сигнал CS ? или одиночной записи и сброса после окончания операции чтения достаточно? И в каком месте я должен указывать оп-код операции (читать я хочу или писать?) Нужно ли мне соблюдать все тайминги описанные в протоколе общения с микросхемой Atmel, или они соблюдаются уже внутренней логикой интеловского контроллера?. непонятно.
Бит CS (Chip Select) Нужно ставить всегда, когда ты хочешь общаться с МС, иначе она не реагирует на входные сигналы. Это сделано для того, чтобы можно было несколько МС вешать на одну шину и выбирать нужную одним битом. SK (Serial Clock) - Оно же синхронизация, нужен чтобы МС прочла сигнал на входе. То есть устанавливаем нужный сигнал на входе, затем ставим этот бит и МС его принимает. Аналогично и с приёмом жанных из МС. Ставим этот бит, в ответ МС выдаёт следующий бит информации на выходе. ИМХО если все ноги выведены на порт контроллера, то протокол нужно соблюдать, иначе сделали бы по-другому.
Arisu Хмм... Ну, можно и не сразу, т.е. заморозить сигнал clock, а потом (переведя дух снова пустить clock и прочитать.
Arisu Покури любую доку по SPI, лучше какую-нибудь моторолловскую - там это подробно написано. А если сильно подробно не надо - так в ее родной доке есть все диаграммы сигналов сигналов и описание команд.
ок спасибо. похоже начинаю чего-то понимать. то есть для передачи одного бита мне нужно сделать так?: 1) включить CS 2) поставить нужный бит в DI 3) включить SK 4) подождать 5) выключить SK SK сам будет сбрасыватся в 0, после того как МС примет сигнал (бит)? ЗЫ раньше я хотел сжечь только отдел документации интела. теперь похоже на очереди и Атмел.
Arisu В 5м пункте Вы же сами сбрасываете SK. Что ещё за подтверждение? В смысле, данные могут не записаться или как?
может какуюнить книгу посоветуете или статейку на счёт этого интерфейса? (как я понял он стандартный для таких Епромов) а то у меня целостности картины нет.
Arisu Описание SPI? В самом даташите этой памяти он должен быть описан или на сайте производителя отдельной докой. Да, почти все paged flash его используют.
Arisu Ну неужели так трудно найти? :/ Например: http://en.wikipedia.org/wiki/Serial_Peripheral_Interface_Bus Не надо лениться, нехорошо это...
Эта междуморда называется "microwire" (только сейчас вспомнил Дальше здесь: Яндекс AltaVista Гугол Просто море статей (прямо как про ком-порт
вопрос появился: когда я считал бит из DO, то SK я должен сбросить сам? или он стробируется несмотря на мои действия (типа не успел считать - твои проблемы) ?
погоди. DI - туда DO - оттуда CS - выбор микрухи SK - для стробирования DI и DO что бы микруха приняла бит с DI я должен поднять SK на время и потом сбросить. что бы я принял от микрухи - я должен дождатся как поднимится SK и взять с DO. но тогда получается что если я не успел взять с DO до того как опустилось SK - то я пролетаю ). прямо хоть все системные процессы блин останавливай что бы успеть. ИЛИ не так ?? (до меня долго доходит видимо) было бы гораздо удобнее если бы следующий бит в DO микруха пихала только после того как я в ручную снимаю SK. но вот создатели системы чё-то не додумали
Ты как с ней работаешь? Так? Чтение: 1. Поставили SK 2. Прочли DO 2. Сбросили SK 3. Записали прочитаное в массив 4. переход на 1 пока не прочитаем всё. Запись: 1. Прочли бит из массива 2. Записали в DI 3. Поставили SK 4. Сбросили SK 5. Переход на 1 пока не записали всё. После каждого пункта скорее всего нужна некоторая задержка (написано в доке на МС). По идее так надо.
нет. я пока только запись сделал (работает). А вот чтение я не до конца понял. Судя по документации атмела при чтении (сразу после того как я отправляю Опкод|адрес в микруху) и пока стоит CS - мне на DO приходят биты с прочтённой ячейки, но, как я понял - SK начинает стробировать сама микруха, а не я уже. Если это не так (в смысле что SK и при чтении должен поднимать тоже Я) - то тогда вопросо нет.