exponenta event banner

i2c

Описание

I2C, или Inter-Integrated Circuit, - протокол, поддерживающий двухпроводную связь. Один i2c объект представляет соединение между MATLAB ® и платой адаптера I2C. К поддерживаемым адаптерам относятся адаптер общей фазы Aardvark I2C/SPI Host и плата адаптера National Instruments ® USB-845x. Адаптер имеет одну или несколько подключенных к нему сенсорных микросхем. MATLAB посылает команды на плату адаптера, которая является устройством контроллера I2C, для связи с микросхемой, которая является I2C периферийным устройством. i2c объект в MATLAB всегда имеет роль контроллера I2C и не может использоваться в роли периферии. Использовать fread и fwrite на i2c обеспечение возможности осуществления связи с чипом.

Создание

Описание

пример

i2cobj = i2c(vendor,boardIndex,remoteAddress) создает i2c объект, связанный с vendor, boardIndex, и remoteAddress.

  • vendor должно быть либо 'Aardvark', для использования с адаптером Total Phase Aardvark, или 'NI845x', для использования с платой адаптера NI USB-845x. Этот ввод устанавливает Vendor собственность.

  • boardIndex указывает индекс платы адаптера и 0 если к компьютеру подключен только один адаптер. Этот ввод устанавливает BoardIndex собственность.

  • remoteAddress определяет шестнадцатеричный адрес периферийного устройства I2C, с которым осуществляется связь, и содержится в документации или листе технических данных микросхемы. Этот ввод устанавливает RemoteAddress собственность.

Вы можете взаимодействовать с несколькими I2C периферийными устройствами на одном адаптере, используя один i2c объект. Для связи с другим I2C периферийным устройством сначала создайте объект и используйте fopen для открытия подключения к адаптеру. Затем измените RemoteAddress к адресу соответствующего периферийного устройства. Теперь вы можете использовать fwrite и fread для связи с указанным периферийным устройством. Пример этого рабочего процесса см. в разделе Взаимодействие с несколькими периферийными устройствами из адаптера NI USB-845x.

Свойства

развернуть все

Индекс платы адаптера, указанный как целое число. Если в компьютер подключен только один адаптер, индексный номер платы будет 0. Если подключено несколько адаптеров, каждой плате присваивается свой индексный номер. Определение индекса платы с помощью instrhwinfo('i2c','Aardvark') или instrhwinfo('i2c','NI845x'). Это свойство можно задать только при создании объекта.

Пример: i2cobj = i2c('Aardvark',1,'50h') подключается к адаптеру Aardvark со значением индекса 1.

Типы данных: double | int8 | int16 | int32 | uint8 | uint16 | uint32

Это свойство доступно только для чтения.

Уникальный идентификатор устройства связи контроллера I2C, указанный как символьный вектор.

Пример: i2cobj.BoardSerial возвращает уникальный идентификатор адаптера общей фазы Aardvark или адаптера NI USB-845x.

Типы данных: char

Скорость передачи данных аппаратных средств адаптера, заданная как положительное целое число в кГц. Используйте скорость передачи, поддерживаемую адаптером и микросхемами. Значение по умолчанию - 100 кГц для адаптеров Aardvark и USB-845x.

Пример: i2cobj.BitRate = 50 устанавливает скорость передачи 50 кГц.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

I2C адрес периферийного устройства, указанный как число от 0 до 127 (включительно), шестнадцатеричное число, символьный вектор или строковый скаляр. Для определения адреса микросхемы обратитесь к ее документации или листу технических данных. Адрес можно также найти, просканировав приборы в средстве тестирования и измерения. В инструменте щелкните правой кнопкой мыши узел I2C и выберите Сканировать адаптеры I2C. Все чипы, обнаруженные при сканировании, перечислены в дереве оборудования. Список включает удаленный адрес микросхемы.

Необходимо указать это свойство во время создания объекта и изменить его после создания объекта с помощью точечной нотации. Укажите адрес периферии как шестнадцатеричное значение одним из следующих способов.

  • Приложить h до конца шестнадцатеричного числа в виде символьного вектора или строкового скаляра.

  • Использовать префикс 0x в начале шестнадцатеричного числа.

  • Использовать hex2dec с шестнадцатеричным номером в качестве входного аргумента.

Взаимодействие с несколькими I2C периферийными устройствами из одного i2c объект, установка RemoteAddress на соответствующий адрес периферийного устройства. Пример этого рабочего процесса см. в разделе Взаимодействие с несколькими периферийными устройствами из адаптера NI USB-845x.

Примечание

При чтении этого свойства с использованием точечной нотации оно возвращается в виде числового скаляра, представляющего шестнадцатеричное число. Чтобы преобразовать обратно в шестнадцатеричный номер, используйте dec2hex. Например, dec2hex(i2cObj.RemoteAddress) возвращает I2C адрес периферии в виде шестнадцатеричного номера для i2c объект i2cObj.

Пример: i2cobj = i2c('Aardvark',0,'50h') и i2cobj.RemoteAddress = '50h' укажите адрес 50 шестнадцатеричных.

Пример: i2cobj = i2c('Aardvark',0,0x50) и i2cobj.RemoteAddress = 0x50 укажите адрес 50 шестнадцатеричных.

Пример: i2cobj = i2c('Aardvark',0,hex2dec('50')) и i2cobj.RemoteAddress = hex2dec('50') укажите адрес 50 шестнадцатеричных.

Типы данных: double | int8 | int16 | int32 | uint8 | uint16 | uint32 | char | string

Поставщик адаптера I2C, указан как 'Aardvark' или 'NI845x'. Поставщик: 'Aardvark' при использовании адаптера общей фазы Aardvark и 'NI845x' при использовании адаптера NI USB-845x. Это свойство можно задать только при создании объекта.

Пример: i2cobj = i2c('Aardvark',0,'50h') подключается к адаптеру общей фазы Aardvark.

Пример: i2cobj = i2c('NI845x',0,'50h') подключается к адаптеру NI USB-845x.

Типы данных: char | string

Питание адаптера Aardvark, указанный как 'none' или 'both'. Это свойство можно задать только для адаптеров Aardvark. Стоимость 'both' означает питание обеих линий, если они поддерживаются. Стоимость 'none' означает электропитание без линий.

Примечание

Если в последовательном программном обеспечении Total Phase Control Center выключено целевое питание, может возникнуть ошибка при попытке подключения к адаптеру Aardvark с помощью fopen. Чтобы задать параметр вручную, откройте программу и установите флажок Целевая мощность (Target Power).

Пример: i2cobj.TargetPower = 'both' обеспечивает питание обеих линий адаптера Aardvark.

Типы данных: char | string

Включенные импульсные резисторы, указанные как 'both' или 'none'. Стоимость 'both' позволяет 2k импульсным резисторам защитить аппаратные средства в I2C устройстве, если они поддерживаются.

Устройства отличаются по использованию пульп. Адаптеры Aardvark и NI USB-8452 имеют внутренние импульсные резисторы для подключения обеих шин к VDD и могут быть установлены программно. Адаптер NI USB-8451 не имеет такого типа внутреннего сопротивления пульпации и, следовательно, требует внешних пульпаций. Обратитесь к документации устройства, чтобы убедиться, что вы используете правильные пульпы.

Пример: i2cobj.PullupResistors = 'none' отключает резисторы пульпации.

Типы данных: char | string

Функции объекта

fopenПодключение объекта интерфейса к прибору
freadСчитывание двоичных данных с прибора
fwriteЗапись двоичных данных в прибор
fcloseОтсоединить объект интерфейса от прибора
recordЗапись данных и информации о событиях в файл

Примеры

свернуть все

Свяжитесь с чипом AT24C02 EEPROM на монтажной плате, с адресом 50 ведьм и индексом правления 0, используя адаптер Муравьеда.

Убедитесь, что адаптер Aardvark установлен для использования i2c , а затем просмотрите свойства адаптера.

instrhwinfo('i2c')
instrhwinfo('i2c','Aardvark')
ans = 

  HardwareInfo with properties:

    InstalledAdaptors: {'Aardvark'  'NI845x'}
       JarFileVersion: 'Version 4.1'

Access to your hardware may be provided by a support package. Go to the Support Package Installer to learn more.



ans = 

  HardwareInfo with properties:

             AdaptorDllName: 'C:\Program Files\MATLAB\R2019b\toolbox\instrument\instrumentadaptors\win64\mwaardvarki2c.dll'
          AdaptorDllVersion: 'Version 4.1'
                AdaptorName: 'Aardvark'
              BoardIdsInUse: [1×0 double]
          InstalledBoardIDs: 0
       DetectedBoardSerials: {'2237482577 (BoardIndex: 0)'}
      ObjectConstructorName: 'i2c('Aardvark', BoardIndex, RemoteAddress);'
              VendorDllName: 'aardvark.dll'
    VendorDriverDescription: 'Total Phase I2C Driver'

Access to your hardware may be provided by a support package. Go to the Support Package Installer to learn more.

Создание i2c объект с именем i2cobj с Vendor 'Aardvark', BoardIndex из 0, и RemoteAddress из 50h.

i2cobj = i2c('Aardvark',0,'50h')
   I2C Object : I2C-0-50h

   Communication Settings 
      BoardIndex          0
      BoardSerial         0
      BitRate:            100 kHz
      RemoteAddress:      50h
      Vendor:             aardvark


   Communication State 
      Status:             closed
      RecordStatus:       off

   Read/Write State  
      TransferStatus:     idle

Подключитесь к микросхеме.

fopen(i2cobj)

Примечание

Если в последовательном программном обеспечении Total Phase Control Center выключено целевое питание, может возникнуть ошибка при попытке подключения к адаптеру Aardvark с помощью fopen. Чтобы задать параметр вручную, откройте программу и установите флажок Целевая мощность (Target Power).

Написать 'Hello World!' в микросхему EEPROM. Данные записываются постранично в I2C. Каждая страница содержит восемь байт. Адрес страницы должен быть указан перед каждым байтом записанных данных.

Первый байт строки 'Hello World!' является 'Hello Wo'. Его адрес страницы равен 0.

fwrite(i2cobj,[0 'Hello Wo'])

Второй байт строки 'Hello World!' является 'rld!'. Его адрес страницы - 8.

fwrite(i2cobj,[8 'rld!'])

Чтобы начать чтение с первого байта первой страницы, запишите ноль в i2c объект.

fwrite(i2cobj,0)

Считывание данных из микросхемы с помощью fread функция. Чип возвращает отправленные ему символы.

char(fread(i2cobj,12))'
ans =

    'Hello World!'

Отсоедините устройство I2C.

fclose(i2cobj)

Очистить объект из рабочей области.

clear i2cobj

Взаимодействие с несколькими I2C периферийными устройствами с одного адаптера NI USB-845x. С помощью адаптера Aardvark можно считывать данные с нескольких периферийных устройств. В этом примере два периферийных устройства представляют собой два сенсорных чипа на печатной плате с адресами 62 шестнадцатеричных и 53 шестнадцатеричных. Индекс платы равен 0. Плата адаптера NI USB-845x подключается к компьютеру (через порт USB), а монтажная плата, содержащая микросхемы датчика, подключается к плате адаптера хоста по проводам.

Убедитесь, что адаптер NI USB-845x установлен, чтобы можно было использовать i2c , а затем просмотрите свойства адаптера.

instrhwinfo('i2c')
instrhwinfo('i2c','NI845x')
ans = 

  HardwareInfo with properties:

    InstalledAdaptors: {'Aardvark'  'NI845x'}
       JarFileVersion: 'Version 4.1'

Access to your hardware may be provided by a support package. Go to the Support Package Installer to learn more.



ans = 

  HardwareInfo with properties:

             AdaptorDllName: 'C:\Program Files\MATLAB\R2019b\toolbox\instrument\instrumentadaptors\win64\mwni845xi2c.dll'
          AdaptorDllVersion: 'Version 4.1'
                AdaptorName: 'NI845x'
              BoardIdsInUse: [1×0 double]
          InstalledBoardIDs: [1×0 double]
       DetectedBoardSerials: {0×1 cell}
      ObjectConstructorName: 'i2c('NI845x', BoardIndex, RemoteAddress);'
              VendorDllName: 'Ni845x.dll'
    VendorDriverDescription: 'National Instruments NI USB 845x Driver'

Access to your hardware may be provided by a support package. Go to the Support Package Installer to learn more.

Создание i2c объект с именем i2cobj с Vendor 'NI845x', BoardIndex из 0, и RemoteAddress из 62h. Этот адрес является удаленным адресом первого I2C периферийного устройства, к которому вы подключаетесь.

i2cobj = i2c('NI845x',0,'62h')
   I2C Object : I2C-0-62h

   Communication Settings 
      BoardIndex          0
      BoardSerial         0
      BitRate:            100 kHz
      RemoteAddress:      62h
      Vendor:             NI845x


   Communication State 
      Status:             closed
      RecordStatus:       off

   Read/Write State  
      TransferStatus:     idle

Откройте подключение к адаптеру NI USB-845x. Это подключение к микросхеме датчика с помощью RemoteAddress задается при создании объекта.

fopen(i2cobj)

Запишите данные в микросхему датчика. Чтобы найти удаленный адрес и другую информацию о чипе, необходимо прочитать документацию или опросный лист чипа. В этом случае откройте реестр чипов, отправив ему 0.

fwrite(i2cobj,0)

Считывание данных из микросхемы с помощью fread функция. Отправив один байт, можно прочитать реестр идентификаторов устройств. Для этого чипа реестр идентификаторов устройств только для чтения равен 229.

fread(i2cobj,1)
ans = 

   229

Переключитесь на второй микросхему датчика, установив RemoteAddress кому 53h. Этот адрес является удаленным адресом второго I2C периферийного устройства, к которому вы подключаетесь. Повторное открытие соединения с адаптером не требуется.

i2cobj.RemoteAddress = '53h';

Запись в микросхему датчика и чтение из нее. Поскольку этот чип идентичен первому чипу, его реестр ID устройства также равен 229.

fwrite(i2cobj,0)
fread(i2cobj,1)
ans = 

   229

Отсоедините устройство I2C.

fclose(i2cobj)

Очистить объект из рабочей области.

clear i2cobj
Представлен в R2012a