Exemple #1
0
        private static void TestI2C()
        {
            NativeMethods.Init_libMPSSE();

            FTDI.FT_STATUS status;

            uint channelCount = 0;

            status = I2C.NativeMethods_I2C.I2C_GetNumChannels(out channelCount);
            if (status != FTDI.FT_STATUS.FT_OK)
            {
                throw new InvalidOperationException("Unable to find number of I2C channels. (Status: " + status + ")");
            }

            var infoNode = new NativeMethods.FT_DEVICE_LIST_INFO_NODE();

            status = I2C.NativeMethods_I2C.I2C_GetChannelInfo(0, infoNode);
            if (status != FTDI.FT_STATUS.FT_OK)
            {
                throw new InvalidOperationException("Unable to open I2C channel. (Status: " + status + ")");
            }

            IntPtr i2cHandle;

            status = I2C.NativeMethods_I2C.I2C_OpenChannel(0, out i2cHandle);
            if (status != FTDI.FT_STATUS.FT_OK)
            {
                throw new InvalidOperationException("Unable to open I2C channel. (Status: " + status + ")");
            }

            var config = new I2C.NativeMethods_I2C.ChannelConfig(I2C.NativeMethods_I2C.ClockRate.Standard, 1, I2C.NativeMethods_I2C.ConfigOptions.None);

            status = I2C.NativeMethods_I2C.I2C_InitChannel(i2cHandle, config);
            if (status != FTDI.FT_STATUS.FT_OK)
            {
                throw new InvalidOperationException("Unable to initialize I2C channel. (Status: " + status + ")");
            }

            byte gpioState;

            status = NativeMethods.FT_ReadGPIO(i2cHandle, out gpioState);
            if (status != FTDI.FT_STATUS.FT_OK)
            {
                throw new InvalidOperationException("Unable to open I2C channel. (Status: " + status + ")");
            }

            status    = I2C.NativeMethods_I2C.I2C_CloseChannel(i2cHandle);
            i2cHandle = IntPtr.Zero;
            if (status != FTDI.FT_STATUS.FT_OK)
            {
                throw new InvalidOperationException("Unable to close I2C channel. (Status: " + status + ")");
            }

            NativeMethods.Cleanup_libMPSSE();

            return;
        }
Exemple #2
0
        private static void TestSPI()
        {
            NativeMethods.Init_libMPSSE();

            FTDI.FT_STATUS status;

            uint channelCount = 0;

            status = SPI.NativeMethods_SPI.SPI_GetNumChannels(out channelCount);
            if (status != FTDI.FT_STATUS.FT_OK)
            {
                throw new InvalidOperationException("Unable to find number of SPI channels. (Status: " + status + ")");
            }

            var infoNode = new NativeMethods.FT_DEVICE_LIST_INFO_NODE();

            status = SPI.NativeMethods_SPI.SPI_GetChannelInfo(0, infoNode);
            if (status != FTDI.FT_STATUS.FT_OK)
            {
                throw new InvalidOperationException("Unable to open SPI channel. (Status: " + status + ")");
            }

            IntPtr spiHandle;

            status = SPI.NativeMethods_SPI.SPI_OpenChannel(0, out spiHandle);
            if (status != FTDI.FT_STATUS.FT_OK)
            {
                throw new InvalidOperationException("Unable to open SPI channel. (Status: " + status + ")");
            }

            var configOptions = SPI.NativeMethods_SPI.ConfigOptions.SPI_CONFIG_OPTION_MODE3 |
                                SPI.NativeMethods_SPI.ConfigOptions.SPI_CONFIG_OPTION_CS_DBUS3 |
                                SPI.NativeMethods_SPI.ConfigOptions.SPI_CONFIG_OPTION_CS_ACTIVELOW;
            var config = new SPI.NativeMethods_SPI.ChannelConfig(100000, 1, configOptions, 0);

            status = SPI.NativeMethods_SPI.SPI_InitChannel(spiHandle, config);
            if (status != FTDI.FT_STATUS.FT_OK)
            {
                throw new InvalidOperationException("Unable to initialize SPI channel. (Status: " + status + ")");
            }

            var transferOptions = SPI.NativeMethods_SPI.TransferOptions.SPI_TRANSFER_OPTIONS_SIZE_IN_BYTES |
                                  SPI.NativeMethods_SPI.TransferOptions.SPI_TRANSFER_OPTIONS_CHIPSELECT_ENABLE |
                                  SPI.NativeMethods_SPI.TransferOptions.SPI_TRANSFER_OPTIONS_CHIPSELECT_DISABLE;
            var  buffer           = new byte[] { 0xFF };
            uint bytesTransferred = 0;

            status = SPI.NativeMethods_SPI.SPI_Write(spiHandle, buffer, 1, out bytesTransferred, transferOptions);

            Thread.Sleep(1);



            //byte gpioState;
            //status = NativeMethods.FT_ReadGPIO(spiHandle, out gpioState);
            //if (status != FTDI.FT_STATUS.FT_OK)
            //{
            //	throw new InvalidOperationException("Unable to open SPI channel. (Status: " + status + ")");
            //}

            status    = SPI.NativeMethods_SPI.SPI_CloseChannel(spiHandle);
            spiHandle = IntPtr.Zero;
            if (status != FTDI.FT_STATUS.FT_OK)
            {
                throw new InvalidOperationException("Unable to close SPI channel. (Status: " + status + ")");
            }

            NativeMethods.Cleanup_libMPSSE();

            return;
        }