Проектирование средств контроля и диагностики с элементами высокой интеграции. Методические указания - 15 стр.

UptoLike

13
следует сформировать сигнал STOP, и из буфера будут записаны в память
переданные из микроконтроллера 34 байта. Каким образом можно определить,
в какое место буфера происходит текущая запись? Можно считать, что
младшие 6 битов адреса ячейки памяти, куда производится запись,
являются адресом ячейки памяти в буфере, куда заносится текущий байт.
Когда в процессе записи микроконтроллер
доходит до последней ячейки
буфера, младшие биты адреса будут иметь вид 111111. После записи байта в
эту последнюю ячейку буфера, адрес имеет в младших битах все нули. Это и
является признаком того, что нужно прекратить передачу и очистить буфер,
выдав STOP.
У программиста нет прямого доступа к внутреннему счетчику адреса
микросхемы памяти
. Однако, программа пользователя может иметь свою
собственную переменнуюаналог внутреннего счетчика адреса микросхемы
памяти. Программа должна инкрементировать значение этой переменной с
каждой новой записью байта данных. Таким образом, программа пользователя
может самостоятельно определять заполнение буфера и выдавать сигнал STOP
в нужный момент времени.
Затем можно снова начать запись, отправив в микросхему
памяти новый
начальный адрес записи, который, кстати, будет иметь младшие разряды вида
000000, т. е. соответствует началу буфера. Если дальше передача ведется
длинной последовательностью подряд идущих байт, то перезапись будет
происходить уже по целому буферу, а не по его части, что заметно повышает
среднюю скорость записи информации в память.
Чтение
одного байта или нескольких последовательно расположенных
(в адресном пространстве) байт из памяти
При чтении данных из памяти надо выполнить следующую, на первый
взгляд не совсем естественную процедуру. А именно, надо сначала сделать вид,
что мы собираемся выполнять запись байта в указанный адрес, а затем
переключиться на чтение данных.
Такая
хитрая операция необходима для того, чтобы установить
внутренний счетчик адреса микросхемы памяти в нужное значение. Чуть более
подробно эта процедура (c точки зрения микроконтроллера) выглядит так:
1. Выдать запросный пакет (с признаком записи информации). Получить ACK.
2. Выдать два байта адреса. На каждый получить ACK.
3. Выдать запросный пакет (с признаком чтения информации). Получить ACK.
4. Принять
байт информации из памяти. Далее возможны два варианта. Если
микроконтроллер собирается продолжить чтение данных, то необходимо
выдать (из микроконтроллера!) сигнал ACK - подтверждение принятия байта из
памяти. По этому сигналу микросхема памяти подготовит для выдачи
следующий байт. Затем контроллер переходит к началу пункта 4 и т.д.
Если контроллер не собирается продолжать чтение
следующего байта, он
должен вместо ACK выдать специальную комбинацию сигналов на линиях SCL
и SDA, которая называется сигналом NACK (отсутствие подтверждения). Далее