OSFP-EVB

aliexpressで安い、OSFP対応のEVBを見つけて購入。

https://ja.aliexpress.com/item/1005006306962550.htm

基板上に乗っているUSB/I2Cデバイスは、CH341T。ドライバを検索する。

https://www.wch-ic.com/downloads/CH341DS1_PDF.html

https://www.wch-ic.com/downloads/CH341PAR_EXE.html

「デバイスマネージャー」でinterface/USB-EPP/I2C..CH341Aと現れる

https://www.wch-ic.com/downloads/CH341PAR_ZIP.html

DLL library

c# samples

https://learn.microsoft.com/ja-jp/dotnet/iot/tutorials/temp-sensor

#include <iostream>#include <iomanip>#include <Windows.h>#include <tchar.h>#include <stdio.h>#include "CH341DLL_EN.H"
#pragma comment(lib,"./CH341DLLA64.LIB")
//BOOL WINAPI CH341ReadI2C(  // Reads one byte of data from the I2C interface//ULONG   iIndex,  // Specify the CH341 device serial number//UCHAR   iDevice,  // The lower 7 bits specify the I2C device address//UCHAR   iAddr,  // Specifies the address of the data unit//PUCHAR   oByte );  // Point to a byte unit, used to save the read byte data
int main(){    int i;    UCHAR data;
    std::cerr << "SFP/QSFP/OSFP EEPROM A0h dump via CH341\n";    // Device Index Number    ULONG iIndex = 0;
    // Open Device    HANDLE h = CH341OpenDevice(iIndex);
    // DLL verison    ULONG dllVersion = CH341GetVersion();    std::cerr << "DLL verison " << dllVersion << "\n";
    // Driver version    ULONG driverVersion = CH341GetDrvVersion();    std::cerr << "Driver verison " << driverVersion << std::endl;
    // Device Name    PVOID p = CH341GetDeviceName(iIndex);    std::cerr << "Device Name " << (PCHAR)p << std::endl;
    // IC verison 0x10=CH341,0x20=CH341A,0x30=CH341A3    ULONG icVersion = CH341GetVerIC(iIndex);    std::cerr << "IC version " << std::hex << icVersion << std::endl;
    // Reset Device    BOOL b = CH341ResetDevice(iIndex);    std::cerr << "Reset Device " << b << std::endl;
    for (i = 0; i < 0xff; i++) {     BOOL b = CH341ReadI2C(iIndex, 0x50, i, &data);     printf(" %02X :", (0xff &(char)data));    }}

Windowsアプリケーションの開発環境

Windows GUIのアプリをVisual Stdioで作成する際に、SDKや言語の組み合わせが複数あって迷う。

SFP TOOLS Form + C++版 (2024/02/15)

CT341のドライバーがC言語であり、そのサンプルもC++だったのでまず。これから手をつけた。まぁ、動くようにはなったけど。WindowsのSDKが基本手的にC#用であることもありイマイチ。C#で書き直すならSDKも新しいのに切り替えた方が良いかと思った。

Windowsで使うC++はクラシックはものとは色々違うのも混乱する。全く別な言語の方が判りやすい。

SFP TOOLS WPF + C#(2024/02/19)

C言語用のCT341のライブラリをC#から外部DLL呼び出しにして、基本的にC#で記述。GUIもWPFに。全体的にすっきりした感じ。

SFP TOOLS MAUI(将来)

CT341を使用した、I2Cへの直接操作ができなくても。バイナリー形式で保存されたEEPROMデータのチェックにも使えるのでMac/iPadで使えるツールも開発したい。

他のUSB I2Cデバイスへの対応