i2c

Создайте I2C объект

Описание

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

Создание

Описание

пример

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

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

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

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

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

Свойства

расширить все

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

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

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

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

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

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

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

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

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

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

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

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

  • Добавление h в конец шестнадцатеричного числа как вектор символов или строковый скаляр.

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

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

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

Примечание

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

Пример: i2cobj = i2c('Aardvark',0,'50h') и i2cobj.RemoteAddress = '50h' укажите адрес 50 hex.

Пример: i2cobj = i2c('Aardvark',0,0x50) и i2cobj.RemoteAddress = 0x50 укажите адрес 50 hex.

Пример: i2cobj = i2c('Aardvark',0,hex2dec('50')) и i2cobj.RemoteAddress = hex2dec('50') укажите адрес 50 hex.

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

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

Пример: i2cobj = i2c('Aardvark',0,'50h') соединяется с адаптером Total Phase Aardvark.

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

Типы данных: 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 pullup резисторов защитить оборудование в I2C устройстве, если поддерживается.

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

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

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

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

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

Примеры

свернуть все

Связь с AT24C02 микросхемой EEPROM на печатной плате с адресом 50 hex и индексом платы 0 с помощью адаптера Aardvark.

Убедитесь, что адаптер 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 hex и 53 hex. Индекс платы 0. Плата USB-845x адаптера NI подключена к компьютеру (через порт USB), а плата, содержащая микросхемы датчика, соединена с платой адаптера хоста через провода.

Убедитесь, что адаптер USB-845x NI установлен так, что вы можете использовать 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

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

fopen(i2cobj)

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

fwrite(i2cobj,0)

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

fread(i2cobj,1)
ans = 

   229

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

i2cobj.RemoteAddress = '53h';

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

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

   229

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

fclose(i2cobj)

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

clear i2cobj
Введенный в R2012a