Например TDA7294

Форум РадиоКот • Просмотр темы - конвертор CH341 (USB/SPI)
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Вт июл 08, 2025 10:34:56

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: конвертор CH341 (USB/SPI)
СообщениеДобавлено: Пт авг 02, 2024 16:12:51 
Открыл глаза

Карма: 3
Рейтинг сообщений: 9
Зарегистрирован: Чт ноя 26, 2020 13:19:49
Сообщений: 73
Рейтинг сообщения: 0
Доброго времени суток уважаемые коты. Есть приблуда на микросхеме СН341. К ней пишу прогу и понять не могу почему не работает.
Код:
        private void button2_Click(object sender, EventArgs e)
        {
            byte[] BuferRx = Enumerable.Repeat<byte>(0x00, 3).ToArray();
            var statement = Imports.CH341OpenDevice(0);
            if ((int)statement != -1)
            {
                labelOpenSPI.Text = "устройство подключено";
                labelIntSPI.Text = Imports.CH341SetStream(0, 0).ToString();  // устройство, настройки SPI
                labelSpeedSPI.Text = Imports.CH341SetupSerial(0, 0, 100).ToString();
                BuferRx[0] = ConvertBit(Data_Rx, 0);
                BuferRx[1] = ConvertBit(Data_Rx, 1);
                BuferRx[2] = ConvertBit(Data_Rx, 2);
                labelDataSPI.Text = Imports.CH341StreamSPI4(0, 0, 3, BuferRx).ToString();
            }
            else labelOpenSPI.Text = "устройство не найдено";
        }


в общем выдаёт такую бодягу в ответ:
labelOpenSPI.Text = "устройство подключено"
labelIntSPI.Text = true
labelSpeedSPI.Text = false
labelDataSPI.Text = false

Импорт из библиотеки такой
Код:
        public class Imports
        {
           [DllImport("CH341DLL.dll")]
            public static extern IntPtr CH341OpenDevice(uint iIndex);

            [DllImport("CH341DLL.dll")]
            public static extern IntPtr CH341CloseDevice(uint iIndex);

             /*
            шIndex         // CH341 оборудование, указанное число 0 соответствует первому устройству
            iParityMode   // Режим проверки последовательной передачи данных CH341: NOPARITY / ODDPARITY / EVENPARITY / MARKPARITY / SPACEPARITY
            iBaudRate     // Значение скорости передачи последовательного порта. Может быть любое значение между 50 и 3000000
            */
            [DllImport("CH341DLL.dll")]
            public static extern bool CH341SetupSerial(uint iIndex, uint iParityMode, uint iBaudRate);

            /*
            iIndex - номер устройства
            iMode - байт, который определяет следующее:
                Bit [7]:  - SPI byte bit order: 0 = LSB first, 1 = MSB first
                Bit [2]:  - SPI's I/O lines: 0 = single-input/ single-output (D3=clock / D5=out / D7=in) (default);
                                             1 = double input/ double output: D3 clock / (D5=out D4=in) / (D7=in D6=out)
                Bit [1:0] - speed:   00=20kHz, 01=100KHz, 10=400KHz, 11=750kHz
            */
            [DllImport("CH341DLL.dll")]
            public static extern bool CH341SetStream(uint iIndex, uint iMode);

            /*
            ULONG iIndex         // CH341 оборудование, указанное число 0 соответствует первому устройству
            ULONG iChipSelect  // Выбор вывода CHIP_SELECT
            ULONG iLength       // Размер буфера в байтах от 0 до 32
            ULONG ioBuffer      // Буфер передаваемых данных
            */
            [DllImport("CH341DLL.dll")]
            public static extern bool CH341StreamSPI4(uint iIndex, uint iChipSelect, uint iLength, byte[] ioBuffer);



Может кто подсказать, что я делаю не так?

Добавлено after 2 hours 37 minutes 14 seconds:
Нашёл проблему, не установил CS. А конкретно в "labelSpeedSPI.Text = Imports.CH341SetupSerial(0, 0, 100).ToString();" должно быть "labelSpeedSPI.Text = Imports.CH341SetupSerial(0, 0x80, 100).ToString();"
Это включает СS для CS0 (0x81 для S1 и 0x82 для S2 соответственно).осталось порулить со скоростью.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: конвертор CH341 (USB/SPI)
СообщениеДобавлено: Чт авг 08, 2024 08:27:15 
Открыл глаза

Карма: 3
Рейтинг сообщений: 9
Зарегистрирован: Чт ноя 26, 2020 13:19:49
Сообщений: 73
Рейтинг сообщения: 0
Доброго времени суток уважаемые коты. Пытаюсь провести инициализацию SPI в CH347. (нужно установить скорость)
В общем делаю так,
Код:

// Структура настройки SPI
        public struct SPI_CONFIG
        {
            public byte iMode;                   // 0-3: SPI Mode0/1/2/3
            public byte iClock;                  // 0 = 60MHz, 1 = 30MHz, 2 = 15MHz, 3 = 7.5MHz, 4 =3 .75MHz, 5 = 1.875MHz, 6 = 937.5KHz,  7 = 468.75KHz
            public byte iByteOrder;              // 0= LSB, 1= MSB
            public ushort iSpiWriteReadInterval; // Интерфейс SPI общая команда чтения и записи данных, единица измерения — мкс
            public byte iSpiOutDefaultData;      // SPI печатает данные по умолчанию при считывании данных
            public ulong iChipSelect;            // Выбор чипа, бит7 = 0, управление выбором чипа игнорируется, бит7 = 1, допустимые параметры: бит1/0 равны 00/01, тогда контакты CS1/CS2 выбираются как активный выбор чипа низкого уровня соответственно
            public byte iCS1Polarity;            // Бит 0: выбор микросхемы, управление полярностью CS1, 0 - активный низкий уровень; 1 - активный высокий уровень
            public byte iCS2Polarity;            // Бит 0: выбор микросхемы, управление полярностью CS2, 0 - активный низкий уровень; 1 - активный высокий уровень
            public ushort iIsAutoDeativeCS;      // Следует ли автоматически отменять выбор чипа после завершения операции
            public ushort iActiveDelay;          // Время задержки выполнения операций чтения и записи после установки выбора микросхемы, единица измерения — мкс.
            public ulong iDelayDeactive;         // Время задержки выполнения операций чтения/записи после отмены выбора микросхемы, единица измерения — мкс.
        }
// *****

// Настройка и вызов функции настройки
            SPI_CONFIG= new SPI_CONFIG();
            InSPI.iMode = 0;
            InSPI.iClock = 0;
            InSPI.iByteOrder = 0;
            InSPI.iSpiWriteReadInterval = 0;
            InSPI.iSpiOutDefaultData = 0;
            InSPI.iChipSelect = 0;
            InSPI.iCS1Polarity = 0;
            InSPI.iCS2Polarity = 0;
            InSPI.iIsAutoDeativeCS = 0;
            InSPI.iActiveDelay = 0;
            InSPI.iDelayDeactive = 0;
            vai1 = Imports.CH347SPI_Int(0, InSPI);

// Обращение к библиотеке
        public class Imports
        {
            [DllImport("CH347DLL.dll")]
            public static extern bool CH347SPI_Int(uint iIndex, SPI_CONFIG mSpiCfgS);
        }


В строке "vai1 = Imports.CH347SPI_Int(0, InSPI);" происходит затык. Пишет: System.EntryPointNotFoundException: "Не удается найти точку входа "CH347SPI_Int" в DLL "CH347DLL.dll"."
Может кто подсказать, что не так?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: конвертор CH341 (USB/SPI)
СообщениеДобавлено: Чт авг 08, 2024 08:34:36 
Друг Кота

Карма: 68
Рейтинг сообщений: 1958
Зарегистрирован: Сб дек 18, 2021 19:25:32
Сообщений: 12867
Рейтинг сообщения: 0
может быть, второй параметр должен быть указателем на структуру, а не она сама?


Цитата:
Код:
var statement = Imports.CH341OpenDevice(0);
 if ((int)statement != -1)


лишняя переменная. достаточно
Код:
 if (Imports.CH341OpenDevice(0) != -1)


Последний раз редактировалось Martian Чт авг 08, 2024 09:02:41, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: конвертор CH341 (USB/SPI)
СообщениеДобавлено: Чт авг 08, 2024 08:58:26 
Открыл глаза

Карма: 3
Рейтинг сообщений: 9
Зарегистрирован: Чт ноя 26, 2020 13:19:49
Сообщений: 73
Рейтинг сообщения: 0
То же самое пишет. Может я не так что-то делаю?
Код:
         unsafe private void button3_Click(object sender, EventArgs e)
        {
            _SPI_CONFIG InSPI = new _SPI_CONFIG();
            _SPI_CONFIG* mPSpiCfgS = &InSPI;

                 InSPI.iMode = 0;
                InSPI.iClock = 0;
                InSPI.iByteOrder = 0;
                InSPI.iSpiWriteReadInterval = 0;
                InSPI.iSpiOutDefaultData = 0;
                InSPI.iChipSelect = 0;
                InSPI.iCS1Polarity = 0;
                InSPI.iCS2Polarity = 0;
                InSPI.iIsAutoDeativeCS = 0;
                InSPI.iActiveDelay = 0;
                InSPI.iDelayDeactive = 0;
                var vai1 = Imports.CH347SPI_Int(0, &InSPI);

       public class Imports
        {
            unsafe public static extern bool CH347SPI_Int(uint iIndex, _SPI_CONFIG* mSpiCfgS);
        }


Вернуться наверх
 
Выбираем индустриальные и медицинские источники питания MEAN WELL в открытом исполнении

Использование модульных источников питания открытого типа широко распространено в современных устройствах. Присущие им компактность, гибкость в интеграции и высокая эффективность делают их отличным решением для систем промышленной автоматизации, телекоммуникационного оборудования, медицинской техники, устройств «умного дома» и прочих приложений. Рассмотрим подробнее характеристики и особенности трех самых популярных вариантов AC/DC-преобразователей MW открытого типа, подходящих для применения в промышленных устройствах - серий EPS, EPP и RPS представленных на Meanwell.market.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: конвертор CH341 (USB/SPI)
СообщениеДобавлено: Чт авг 08, 2024 09:10:49 
Друг Кота

Карма: 68
Рейтинг сообщений: 1958
Зарегистрирован: Сб дек 18, 2021 19:25:32
Сообщений: 12867
Рейтинг сообщения: 0
Цитата:
Код:
unsafe public static extern bool CH347SPI_Int(uint iIndex, _SPI_CONFIG* mSpiCfgS);
буквы i не хватает. CH347SPI_Init


Последний раз редактировалось Martian Чт авг 08, 2024 09:11:33, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: конвертор CH341 (USB/SPI)
СообщениеДобавлено: Чт авг 08, 2024 09:11:25 
Открыл глаза

Карма: 3
Рейтинг сообщений: 9
Зарегистрирован: Чт ноя 26, 2020 13:19:49
Сообщений: 73
Рейтинг сообщения: 0
Другие функции из этого DLL видит. и даже работает с ними. Затык именно со структурами


Вернуться наверх
 
Распродажа паяльного оборудования ATTEN!
Паяльные станции, паяльники и аксессуары по самой выгодной цене.

По промокоду radiokot скидка 10%
Не в сети
 Заголовок сообщения: Re: конвертор CH341 (USB/SPI)
СообщениеДобавлено: Чт авг 08, 2024 09:12:19 
Друг Кота

Карма: 68
Рейтинг сообщений: 1958
Зарегистрирован: Сб дек 18, 2021 19:25:32
Сообщений: 12867
Рейтинг сообщения: 0
выше отредактировал ответ.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: конвертор CH341 (USB/SPI)
СообщениеДобавлено: Чт авг 08, 2024 09:14:16 
Открыл глаза

Карма: 3
Рейтинг сообщений: 9
Зарегистрирован: Чт ноя 26, 2020 13:19:49
Сообщений: 73
Рейтинг сообщения: 0
БЛИИИНННН!!! ТОЧТО "i" НЕ ХВАТАЛО!!!! ЗАРАБОТАЛО ВООБЩЕМ!!! СПАСИБО!!! 2 дня сидел голову ломал, что не так...


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y