Передача и приём данных

Тем, кто знаком только с последовательной («UART») связью, это покажется неожиданным: у объекта ssi. нет отдельных операций передачи и приёма. Когда вы что-то отправляете, одновременно вы что-то и принимаете (и наоборот). На уровне объекта ssi. эти две операции происходят одновременно: с каждым тактовым импульсом на линии CLK один бит данных выводится на линию DO, а один бит считывается с линии DI. То же верно и тогда, когда линии DO и DI объединены.

Конечно, на прикладном уровне обмен с ведомым SSI-устройством обычно устроен так: сначала ведомому что-то отправляется (команда или данные), а затем от него что-то принимается (данные). Как правило, пока ваше устройство передаёт команду, ведомая сторона не отправляет в ответ ничего осмысленного, но канал SSI всё равно запишет данные с линии DI. Как интерпретировать данные, принятые от ведомого устройства, должно знать ваше приложение.

Аналогично, когда вы принимаете данные от ведомого устройства, вы одновременно что-то и передаёте. Обычно, пока ведомое устройство отправляет вам данные, оно игнорирует всё, что вы ему передаёте.

Отправлять и принимать данные можно двумя способами: по словам или как «строку».

Для «пословных обменов» используйте метод ssi.value. Он одновременно выдаёт и принимает до 16 бит данных. Если отправляется меньше 16 бит, передаётся и принимается указанное число младших (крайних правых) бит.

Dim x As word
...
ssi.value(&hCA5A,14) 'When we want to send something out, we can ignore the "data" we get back
x=ssi.value(&hFFFF,14) 'When we are expecting to receive data, we send out 'all 1s' (good practice)
x=ssi.value(&hCA5A,14) 'Of course we can do both at the same time

Для «строковых обменов» используйте метод ssi.str. Строковые обмены сложнее: можно отправить (и принять) строку из нескольких байтов. Эти байты могут обрабатываться как «чистые» 8-битные слова или как 9-битные слова из восьми бит данных и одного бита подтверждения, как это требуется для связи по I²C (http://en.wikipedia.org/wiki/I2C). Для каждого выданного байта объект ssi. проверяет подтверждение от ведомого. Если подтверждения нет, вывод данных прекращается. Это можно обнаружить, сравнив длину возвращённой строки с длиной строки, которую вы пытались отправить: если они не совпадают, обмен данными завершился преждевременно.

Dim Input_String, Output_String As String
...
Output_String="\x40\x12\xFF"
Input_String=ssi.str(Output_String,1) 'output data, with acknowledgements enabled
If Len(Output_String)<>Len(Input_String) Then
	'something went wrong
End If
...
Совет

Если вы собираетесь работать с устройством I²C, обязательно прочитайте раздел Подробнее об I²C.

Исходный материал Tibbo обновлён 15 августа 2022Оригинал на docs.tibbo.com · Сообщить об ошибке