Связь с EEPROM с помощью шины SPI

В этом примере показано взаимодействие с AT25080A EEPROM на I2C/SPI плате действий Aardvark по шине последовательного периферийного интерфейса (SPI).

Для начала создайте объект SPI. В данном примере мы используем плату I2C/SPI Activity Board компании Aardvark, которая имеет индекс платы и адрес равный 0. Для подключения компьютера к шине SPI используется USB-I2C/SPI адаптер от Aardvark. Для создания объекта SPI это переводится как:

  • Vendor = aardvark

  • BoardIndex = 0

  • Port = 0

eeprom = spi('aardvark',0,0);
disp(eeprom);
SPI Object : 

	Adapter Settings
		BoardIndex:            0
		BoardSerial:           2237727782
		VendorName:            aardvark

	Communication Settings
		BitRate:               1000000 Hz
		ChipSelect:            0
		ClockPhase:            FirstEdge
		ClockPolarity:         IdleLow
		Port:                  0

	Communication State
		ConnectionStatus:      Disconnected

	Read/Write State
		TransferStatus:        Idle

Прежде чем вы сможете выполнить операцию чтения или записи, необходимо подключить объект SPI к устройству с помощью connect функция. Можно проверить, что объект был успешно подключен, проверив его ConnectionStatus свойство. После подключения к устройству свойство ConnectionStatus автоматически обновляется, чтобы быть Connected.

connect(eeprom);
eeprom.ConnectionStatus
ans =

Connected

SPI работает в полнодуплексном режиме. Следовательно, для любой операции чтения/записи данные всегда передаются в обоих направлениях. Это можно проиллюстрировать простой задачей написания 'Hello' в EEPROM и чтения его назад.

Лист таблиц данных EEPROM задает следующее для чтения и записи данных:

  • Чип должен быть включен для записи перед записью чего-либо на него. Чип может быть включен для записи путем записи 6 к нему. ПРИМЕЧАНИЕ: Если чип не включен для записи, он проигнорирует инструкцию записи и вернется в состояние ожидания

  • Данные должны быть записаны в чип в следующем формате:

[Write_Command Upper_Byte_Address Lower_Byte_Address data1 data2 ...]

Для этого EEPROM Write_Command равен 2.

  • Данные должны быть записаны в чип в следующем формате, чтобы считать его правильно:

[Read_Command Upper_Byte_Address Lower_Byte_Address zeros(1,size of data to be read back)]

Для этого EEPROM Read_Command значение 3.

Напишите-включите eeprom

write(eeprom,6);

Напишите 'Hello' по 0-му адресу EEPROM с помощью write функция.

dataToWrite = [2 0 0 double('Hello')];
write(eeprom, dataToWrite);

Теперь мы можем считать данные из EEPROM.

dataToWrite = [3 0 0 zeros(1,5)];
returnedData = writeAndRead(eeprom, dataToWrite);

Возвращенные данные:

  • Байты 1:3 - Все равно

  • Четвертый байт и далее - данные считываются из EEPROM

В этом случае считанные данные:

char(returnedData(4:end))
ans =

Hello

Отсоедините объект SPI и удалите его из памяти и рабочей области.

disconnect(eeprom);
clear('eeprom');