Код: Выделить всё
private void ReadSPI(byte[] byteArray, int adress) //adress is 0x0100, bytearray has 998 Elements for 998 bytes to read
{
byte msbAdress = (byte)(adress >> 8);
byte lsbAdress = (byte)adress;
// First send the adress needed to the EEPROM
byte[] eepromSendData = new byte[] //Sending the EEPROM the command, that it shall return the data from the specific adress
{
0x10, 0x02, 0x00,
0x03, msbAdress, lsbAdress
};
ftStatus = ftdiDevice.Write(eepromSendData, eepromSendData.Length, ref bytesWritten);
byte msbLength = ((byte)(byteArray.Length >> 8));
byte lsbLength = (byte)byteArray.Length;
byte[] readCommand = new byte[] // readCommand for the C232H controller
{
0x20, lsbLength, msbLength
};
ftStatus = ftdiDevice.Write(readCommand, readCommand.Length, ref bytesWritten);
ftStatus = ftdiDevice.Read(byteArray, (uint)byteArray.Length, ref bytesRead);
if (ftStatus != FTDI.FT_STATUS.FT_OK || bytesRead != byteArray.Length)
{
MessageBox.Show("Error reading SPI");
return;
}
bytesWritten = 0;
bytesRead = 0;
}
Написание команды readCommand необходимо, поскольку она активирует часы. Запись только ftdiDevice.Read приведет к зависанию программы.
Чтение разных разделов EEPROM завершилось с одним и тем же результатом.
Массив eepromSendData, который управляет EEPROM, хотя отправляет данные с адреса в этом массиве, попадает в EEPROM как надо. CS активен. Часы можно измерить. На выводе SOMI постоянно находится напряжение 2,4 В (Vcc — 3,3 В), поэтому, насколько я понимаю, EEPROM просто не отправляет никаких данных.
Техническое описание EEPROM
Подробнее здесь: https://stackoverflow.com/questions/790 ... spi-c232hm