www.chms.ru - вывоз мусора в Балашихе 

Динамо-машины  Однокристальные микроконтроллеры 

1 2 3 4 5 6 [ 7 ] 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63

Существует также состояние laquo;повторный Start raquo;, которое может возникнуть в середине информационного пакета. Чуть позже мы рассмотрим ситуации, когда появляется условие laquo;повторный Start raquo;.

Передача данных по шине производится по 8 битов, после чего следует сигнал подтверждения (acknowledge). Сигнал подтверждения свидетельствует о том, что данные нормально приняты и обработаны... Но обо всем по порядку! Взгляните на рис. 1.23, отражающий процесс передачи байта по шине 1С.

lU 2

9 !

- * j-------

: Lack i

аск;

Рис. 1.23. Передача байта по шине ГС

После отработки состояния Start передатчик последовательно выставляет на линии SDA данные, начиная со старшего бита (MSB) и заканчивая младшим (LSB). Данные стробируются по линии SCL импульсами 1...8.

Обратите внимание: линия SDA приемника (slave-абонента) в момент приема информационных битов (MSB-LSB) должна быть выставлена в единичное состояние. Физически это означает, что транзистор, подключенный к линии SDA, должен быть закрыт. В момент отрицательного перепада импульса 8 на линии SCL slave-абонент должен выставить на линию SDA нулевой уровень - открыть транзистор. Тем самым приемник подтверждает нормальный прием байта. Передатчик (master-абонент) должен выставлять на линию SDA единичное состояние. Благодаря тому что линия организована по способу laquo;монтажное И raquo;, ее состояние будет определяться только slave-абонентом. Передатчик должен проверить состояние линии SDA, затем выдать девятый стробирующий импульс, с которым slave-абонент выставит на линию SDA высокий уровень, проверить выполнение этой операции и лтнь после продолжить передачу (рис. 1.24). В случае неподтверждения нормального приема (сигнал АСК имеет высокий уровень) передатчику желательно выполнить условие Stop и повторить передачу.



SDA

передатчика

SDA -

приемника

А

Рис. 1.24. Состояние acknowledge

Третья ситуация, которая может возникнуть при получении сигнала АСК, связана с задержкой обработки данных в slave-абоненте, как показано на рис. 1.25.

/ \

scl-------

приемника

Рис. 1.25. Задержка состояния acknowledge

Задержка освобождения линии SDA не свидетельствует о неправильном обмене информацией, поэтому master-абоненту достаточно дождаться окончания АСК и продолжить передачу. Добавим также, что в фирменной документации состояние acknowledge условно именуется буквой laquo;А raquo;. Если байт, переданный по шине, является последним в пакете, master-устройство вместо проверки сигнала АСК может выставить состояние Stop, и slave-абонент должен освободить линию SDA.

Описанные состояния являются вполне достаточными для функционирования шины 1С с одиночным master-устройством. Как правило, master-абонента очень легко организовать программным способом, что и используется многими разработчиками. Для реализации режима multi-master, как уже было сказано, должны быть реализованы дополнительные состояния синхронизации и арбитража. Вначале рассмотрим синхронизацию.



Действительно, если на шине присутствует несколько master-абонентов, все они наделены возможностью генерации сигнала SCL. Синхронизация между этими сигналами достигается благодаря функции laquo;монтажное И raquo; на линии SCL. Таким образом, состояние laquo;О raquo; продлится до тех пор, пока все master-устройства не выставят на линии SCL высокий уровень, и линия SCL будет задержана в состоянии laquo;О raquo; абонентом с самым длинным циклом нулевого уровня. Остальные абоненты, уже освободившие линию, должны войти в состояние ожидания (рис. 1.26).

Синхронизация абонента 1

Синхронизация абонента 2


Рис. 1.26. Синхронизация на шине 1С

Теперь поговорим об арбитраже. Согласно спецификации режима multi-master, передатчик может начинать передачу данных только после того, как убедится, что шина свободна (линии SDA и SCL имеют высокий уровень). Но несколько передатчиков могут сгенерировать состояние Start практически одновременно, поэтому нужно определить, какое устройство первым выставило Start-условие. Как это возможно выполнить с помощью достаточно скудных (с точки зрения возможностей серьезных шин, конечно!) средств 1С? Дело в том, что линия SDA выполнена также по способу laquo;монтажное И raquo;. В течение процедуры передачи все master-абоненты проверяют состояние линии SDA. Если обнаружено несоответствие (выставляется высокий уровень, а при проверке читается низкий), передатчик, выставляющий высокий уровень, отключается. Естественно, что в процессе передачи бита осуществляется синхронизация.



1 2 3 4 5 6 [ 7 ] 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63