[DllImport("libMPSSE.dll", CallingConvention = CallingConvention.Cdecl)]
protected static extern FTDI.FT_STATUS SPI_Read(IntPtr handle, byte[] buffer, uint sizeToTransfer, ref uint sizeTransferred, uint transferOption);
[DllImport("libMPSSE.dll", CallingConvention = CallingConvention.Cdecl)]
protected static extern FTDI.FT_STATUS SPI_ReadWrite(IntPtr handle, byte[] inBuffer, byte[] outBuffer, uint sizeToTransfer, ref uint sizeTransferred, uint transferOption);
//použití v metodě
public FTDI.FT_STATUS WriteRead(byte[] writeBuffer, ref byte[] readBuffer, uint sizeToTransfer, ref uint transfered)
{
if (!IsOpen)
{
return FTDI.FT_STATUS.FT_DEVICE_NOT_OPENED;
}
if (ftHandle == IntPtr.Zero)
{
return FTDI.FT_STATUS.FT_INVALID_HANDLE;
}
return SPI_ReadWrite(ftHandle, readBuffer, writeBuffer, sizeToTransfer, ref transfered, 0x06);
}
public FTDI.FT_STATUS Read(ref byte[] readBuffer, uint sizeToRead, ref uint readed)
{
if (!IsOpen)
{
return FTDI.FT_STATUS.FT_DEVICE_NOT_OPENED;
}
if (ftHandle == IntPtr.Zero)
{
return FTDI.FT_STATUS.FT_INVALID_HANDLE;
}
return SPI_Read(ftHandle, readBuffer, sizeToRead, ref readed, 0x06);
}
Používám MS VS 2022 Community edition. Nenahlásí žádnou chybu při kompilaci, za běhu nenastane vyjímka. SPI monitoruji logickým analyzátorem. Volání metody Read probíhá bez problémů, z připojeného SPI Slave přečte korektně. Při volání metody WriteRead přečte nahodilá data navzdory tomu, že SPI Slave "odpoví" správně. Poté ani metoda Read nepracuje správně, nepřečte nic ačkoliv na SPI komunikace probíhá správně.
Problémy mám jen s importem fukce SPI_ReadWrite, u ostatních jsem se s potížemi nesetkal. Jak na správný import LibMPSSE.dll, zejména SPI_ReadWrite? Chybu samotné dll nepředpokládám.
hu