CH341

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim mBuffer(mCH341_PACKET_LENGTH) As Byte Dim mLength As UInteger Dim mInLen As UInteger mBuffer(0) = mCH341A_CMD_I2C_STREAM ' 命令码 mBuffer(1) = mCH341A_CMD_I2C_STM_STA mBuffer(2) = mCH341A_CMD_I2C_STM_OUT ' 输出数据,位5-位0为长度,0长度则只发送一个字节并返回应答 mBuffer(3) = &HA0 ' 数据

mBuffer(4) = mCH341A_CMD_I2C_STM_OUT ' 输出数据,位5-位0为长度,0长度则只发送一个字节并返回应答 mBuffer(5) = &H0 ' 数据

mBuffer(6) = mCH341A_CMD_I2C_STM_OUT ' 输出数据,位5-位0为长度,0长度则只发送一个字节并返回应答 mBuffer(7) = &H55 ' 数据

mBuffer(8) = mCH341A_CMD_I2C_STM_STO mBuffer(9) = mCH341A_CMD_I2C_STM_END ' 当前包提前结束 mLength = 10 mInLen = 0

If (CH341.CH341WriteRead(0, mLength, mBuffer(9), mCH341A_CMD_I2C_STM_MAX, 1, mInLen, mBuffer(9)) = True) Then ' 执行数据流命令,先输出再输入 MsgBox("写数据成功!", vbExclamation, "CH341") End If End Sub 这个VB.NET程序运行时就卡死,哪位仁兄帮忙分析一下!谢谢

请参考下面的代码: BOOL WINAPI IIC_OutByteCheckAck( // 输出一字节数据并检查应答是否有效 ULONG iIndex, // 指定CH341设备序号 UCHAR iOutByte ) // 准备写出的数据 { UCHAR mBuffer[ mCH341_PACKET_LENGTH ]; ULONG mLength, mInLen; mBuffer[ 0 ] = mCH341A_CMD_I2C_STREAM; // 命令码 mBuffer[ 1 ] = mCH341A_CMD_I2C_STM_OUT; // 输出数据,位5-位0为长度,0长度则只发送一个字节并返回应答 mBuffer[ 2 ] = iOutByte; // 数据 mBuffer[ 3 ] = mCH341A_CMD_I2C_STM_END; // 当前包提前结束 mLength = 4; mInLen = 0; if ( CH341WriteRead( iIndex, mLength, mBuffer, mCH341A_CMD_I2C_STM_MAX, 1, &mInLen, mBuffer ) ) { // 执行数据流命令,先输出再输入 if ( mInLen && ( mBuffer[ mInLen - 1 ] & 0x80 ) == 0 ) return( TRUE ); // 返回的数据的位7代表ACK应答位,ACK=0有效 } return( FALSE ); }


BOOL WINAPI COtherPage::IIC_WRITEBYTE(ULONG iIndex, UCHAR DevAddr,UCHAR DataAddr,UCHAR Data) { UCHAR mBuffer[ mCH341_PACKET_LENGTH ]; ULONG mLength, mInLen; mBuffer[ 0 ] = mCH341A_CMD_I2C_STREAM; // 命令码 mBuffer[ 1 ] = mCH341A_CMD_I2C_STM_STA; mBuffer[ 2 ] = mCH341A_CMD_I2C_STM_OUT; // 输出数据,位5-位0为长度,0长度则只发送一个字节并返回应答 mBuffer[ 3 ] = DevAddr; // 数据

mBuffer[ 4 ] = mCH341A_CMD_I2C_STM_OUT; // 输出数据,位5-位0为长度,0长度则只发送一个字节并返回应答 mBuffer[ 5 ] = DataAddr; // 数据

mBuffer[ 6 ] = mCH341A_CMD_I2C_STM_OUT; // 输出数据,位5-位0为长度,0长度则只发送一个字节并返回应答 mBuffer[ 7 ] = Data; // 数据

mBuffer[ 8 ] =mCH341A_CMD_I2C_STM_STO; mBuffer[ 9 ] = mCH341A_CMD_I2C_STM_END; // 当前包提前结束 mLength = 10; //mInLen = 0; if ( CH341WriteRead( iIndex, mLength, mBuffer, 32, 1, &mInLen, mBuffer ) ) { // 执行数据流命令,先输出再输入 if ( mInLen && ( mBuffer[ mInLen - 1 ] & 0x80 ) == 0 ) return( TRUE ); // 返回的数据的位7代表ACK应答位,ACK=0有效 } return( FALSE ); } 这段代码才是真正的进行单字节写入EEPROM并有起始位,停止位,检测ACK信号的代码, 而且我问的又不是在VC环境中运行,在VC中我运行通过了,现在想在VB中运行,但是把这段代码移植过去,程序总是卡死掉,运行不下去,求解! 就是想问一下CH341WriteRead这个函数在VB中如何设置 CH341WriteRead( iIndex, mLength, mBuffer, mCH341A_CMD_I2C_STM_MAX, 1, &mInLen, mBuffer )里面的参数问题,谢谢!


只有登录才能回复,可以选择微信账号登录