亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? i2c_exam.c

?? USB2SPI開發(fā)包
?? C
?? 第 1 頁 / 共 2 頁
字號:
// V1.2

#include	<windows.h>
#include	"USBIOX.H"

/* 本程序涉及到
 1、2線接口TWI的一些自定義時(shí)序,處理I2C總線的應(yīng)答位,以及了解2線接口的內(nèi)部時(shí)序分析
 2、提供例子程序,操作2線接口I2C器件X76F640、PCF8574、PCA9554
*/

/* USB2I2C驅(qū)動及DLL的API層次,按從低向高分為
 1、USBIO_WriteData只寫數(shù)據(jù), USBIO_ReadData只讀數(shù)據(jù), USBIO_WriteRead先寫數(shù)據(jù)再讀數(shù)據(jù)
 2、USBIO_StreamI2C先寫I2C,可選地再讀I2C (內(nèi)部調(diào)用USBIO_WriteData和USBIO_WriteRead)
 3、USBIO_ReadEEPROM讀EEPROM數(shù)據(jù), USBIO_WriteEEPROM寫EEPROM數(shù)據(jù) (內(nèi)部調(diào)用USBIO_StreamI2C)
 本例子中的子程序?qū)⒄{(diào)用USBIO_WriteData、USBIO_WriteRead、USBIO_StreamI2C等DLL中的API */

/* 實(shí)測速度
   USBIO_StreamI2C     約56K字節(jié)
   USBIO_ReadEEPROM    約56K字節(jié)
   USBIO_WriteEEPROM   約5K字節(jié)(如果是RAM而非閃存那么與USBIO_ReadEEPROM速度相同)
*/

/* ********************************************************************************************** */
/* 兼容I2C總線的通用操作時(shí)序 */

BOOL	WINAPI	I2C_IssueStart(
	ULONG			iIndex )  // 指定USB2I2C設(shè)備序號
{
	UCHAR	mBuffer[ mUSBIO_PACKET_LENGTH ];
	ULONG	mLength;
	mBuffer[ 0 ] = mUSBIOSS_CMD_I2C_STREAM;  // 命令碼
	mBuffer[ 1 ] = mUSBIOSS_CMD_I2C_STM_STA;  // 產(chǎn)生起始位
	mBuffer[ 2 ] = mUSBIOSS_CMD_I2C_STM_END;  // 當(dāng)前包提前結(jié)束
	mLength = 3;
	return( USBIO_WriteData( iIndex, mBuffer, &mLength ) );  // 寫出數(shù)據(jù)塊
}

BOOL	WINAPI	I2C_IssueStop(
	ULONG			iIndex )  // 指定USB2I2C設(shè)備序號
{
	UCHAR	mBuffer[ mUSBIO_PACKET_LENGTH ];
	ULONG	mLength;
	mBuffer[ 0 ] = mUSBIOSS_CMD_I2C_STREAM;  // 命令碼
	mBuffer[ 1 ] = mUSBIOSS_CMD_I2C_STM_STO;  // 產(chǎn)生停止位
	mBuffer[ 2 ] = mUSBIOSS_CMD_I2C_STM_END;  // 當(dāng)前包提前結(jié)束
	mLength = 3;
	return( USBIO_WriteData( iIndex, mBuffer, &mLength ) );  // 寫出數(shù)據(jù)塊
}

BOOL	WINAPI	I2C_OutBlockSkipAck(  // 輸出數(shù)據(jù)塊,不檢查應(yīng)答
	ULONG			iIndex,  // 指定USB2I2C設(shè)備序號
	ULONG			iOutLength,  // 準(zhǔn)備寫出的數(shù)據(jù)字節(jié)數(shù),單次必須小于29字節(jié)
	PVOID			iOutBuffer )  // 指向一個緩沖區(qū),放置準(zhǔn)備寫出的數(shù)據(jù)
{
	UCHAR	mBuffer[ mUSBIO_PACKET_LENGTH ];
	ULONG	mLength;
	if ( iOutLength == 0 || iOutLength > ( mUSBIO_PACKET_LENGTH - 1 - 1 - 1 ) ) return( FALSE );
	mBuffer[ 0 ] = mUSBIOSS_CMD_I2C_STREAM;  // 命令碼
	mBuffer[ 1 ] = (UCHAR)( mUSBIOSS_CMD_I2C_STM_OUT | iOutLength );  // 輸出數(shù)據(jù),位5-位0為長度
	memcpy( &mBuffer[2], iOutBuffer, iOutLength );  // 數(shù)據(jù)
	mBuffer[ 1 + 1 + iOutLength ] = mUSBIOSS_CMD_I2C_STM_END;  // 當(dāng)前包提前結(jié)束
	mLength = 1 + 1 + iOutLength + 1;
	return( USBIO_WriteData( iIndex, mBuffer, &mLength ) );  // 寫出數(shù)據(jù)塊
}

BOOL	WINAPI	I2C_OutByteCheckAck(  // 輸出一字節(jié)數(shù)據(jù)并檢查應(yīng)答是否有效
	ULONG			iIndex,  // 指定USB2I2C設(shè)備序號
	UCHAR			iOutByte )  // 準(zhǔn)備寫出的數(shù)據(jù)
{
	UCHAR	mBuffer[ mUSBIO_PACKET_LENGTH ];
	ULONG	mLength, mInLen;
	mBuffer[ 0 ] = mUSBIOSS_CMD_I2C_STREAM;  // 命令碼
	mBuffer[ 1 ] = mUSBIOSS_CMD_I2C_STM_OUT;  // 輸出數(shù)據(jù),位5-位0為長度,0長度則只發(fā)送一個字節(jié)并返回應(yīng)答
	mBuffer[ 2 ] = iOutByte;  // 數(shù)據(jù)
	mBuffer[ 3 ] = mUSBIOSS_CMD_I2C_STM_END;  // 當(dāng)前包提前結(jié)束
	mLength = 4;
	mInLen = 0;
	if ( USBIO_WriteRead( iIndex, mLength, mBuffer, mUSBIOSS_CMD_I2C_STM_MAX, 1, &mInLen, mBuffer ) ) {  // 執(zhí)行數(shù)據(jù)流命令,先輸出再輸入
		if ( mInLen && ( mBuffer[ mInLen - 1 ] & 0x80 ) == 0 ) return( TRUE );  // 返回的數(shù)據(jù)的位7代表ACK應(yīng)答位,ACK=0有效
	}
	return( FALSE );
}

BOOL	WINAPI	I2C_InBlockByAck(  // 輸入數(shù)據(jù)塊,每輸入一個字節(jié)都產(chǎn)生有效應(yīng)答
	ULONG			iIndex,  // 指定USB2I2C設(shè)備序號
	ULONG			iInLength,  // 準(zhǔn)備讀取的數(shù)據(jù)字節(jié)數(shù),單次必須小于32字節(jié)
	PVOID			oInBuffer )  // 指向一個緩沖區(qū),返回后是讀入的數(shù)據(jù)
{
	UCHAR	mBuffer[ mUSBIO_PACKET_LENGTH ];
	ULONG	mLength, mInLen;
	if ( iInLength == 0 || iInLength > mUSBIOSS_CMD_I2C_STM_MAX ) return( FALSE );
	mBuffer[ 0 ] = mUSBIOSS_CMD_I2C_STREAM;  // 命令碼
	mBuffer[ 1 ] = (UCHAR)( mUSBIOSS_CMD_I2C_STM_IN | iInLength );  // 輸入數(shù)據(jù),位5-位0為長度
	mBuffer[ 2 ] = mUSBIOSS_CMD_I2C_STM_END;  // 當(dāng)前包提前結(jié)束
	mLength = 3;
	mInLen = 0;
	if ( USBIO_WriteRead( iIndex, mLength, mBuffer, mUSBIOSS_CMD_I2C_STM_MAX, 1, &mInLen, mBuffer ) ) {  // 執(zhí)行數(shù)據(jù)流命令,先輸出再輸入
		if ( mInLen == iInLength ) {
			memcpy( oInBuffer, &mBuffer[0], iInLength );  // 數(shù)據(jù)
			return( TRUE );
		}
	}
	return( FALSE );
}

BOOL	WINAPI	I2C_InByteNoAck(  // 輸入一字節(jié)數(shù)據(jù),但是不產(chǎn)生應(yīng)答
	ULONG			iIndex,  // 指定USB2I2C設(shè)備序號
	PUCHAR			oInByte )  // 指向一個字節(jié)的緩沖區(qū),返回后是讀入的數(shù)據(jù)
{
	UCHAR	mBuffer[ mUSBIO_PACKET_LENGTH ];
	ULONG	mLength, mInLen;
	mBuffer[ 0 ] = mUSBIOSS_CMD_I2C_STREAM;  // 命令碼
	mBuffer[ 1 ] = mUSBIOSS_CMD_I2C_STM_IN;  // 輸入數(shù)據(jù),位5-位0為長度,0長度則只接收一個字節(jié)并發(fā)送無應(yīng)答
	mBuffer[ 2 ] = mUSBIOSS_CMD_I2C_STM_END;  // 當(dāng)前包提前結(jié)束
	mLength = 3;
	mInLen = 0;
	if ( USBIO_WriteRead( iIndex, mLength, mBuffer, mUSBIOSS_CMD_I2C_STM_MAX, 1, &mInLen, mBuffer ) ) {  // 執(zhí)行數(shù)據(jù)流命令,先輸出再輸入
		if ( mInLen ) {
			*oInByte = mBuffer[ mInLen - 1 ];  // 數(shù)據(jù)
			return( TRUE );
		}
	}
	return( FALSE );
}

/* ********************************************************************************************** */
/* 操作加密存儲器X76F640 */

BOOL	WINAPI	X76F640_AckPolling(  // 查詢X76F640應(yīng)答 (包括:輸出起始位,輸出一字節(jié)命令數(shù)據(jù),檢查應(yīng)答是否有效)
	ULONG			iIndex )  // 指定USB2I2C設(shè)備序號
{
	UCHAR	mBuffer[ mUSBIO_PACKET_LENGTH ];
	ULONG	mLength, mInLen;
	mBuffer[ 0 ] = mUSBIOSS_CMD_I2C_STREAM;  // 命令碼
	mBuffer[ 1 ] = mUSBIOSS_CMD_I2C_STM_STA;  // 產(chǎn)生起始位
	mBuffer[ 2 ] = mUSBIOSS_CMD_I2C_STM_OUT;  // 輸出數(shù)據(jù),位5-位0為長度,0長度則只發(fā)送一個字節(jié)并返回應(yīng)答
	mBuffer[ 3 ] = 0xF0;  // 應(yīng)答查詢操作的命令碼
	mBuffer[ 4 ] = mUSBIOSS_CMD_I2C_STM_END;  // 當(dāng)前包提前結(jié)束
	mLength = 5;
	mInLen = 0;
	if ( USBIO_WriteRead( iIndex, mLength, mBuffer, mUSBIOSS_CMD_I2C_STM_MAX, 1, &mInLen, mBuffer ) ) {  // 執(zhí)行數(shù)據(jù)流命令,先輸出再輸入
		if ( mInLen && ( mBuffer[ mInLen - 1 ] & 0x80 ) == 0 ) return( TRUE );  // 返回的數(shù)據(jù)的位7代表ACK應(yīng)答位,ACK=0有效
	}
	return( FALSE );
}

BOOL	WINAPI	X76F640_CheckPasswd(  // 發(fā)出操作命令并檢查指定的密碼 (包括:輸出起始位,輸出9字節(jié)數(shù)據(jù)(1命令+8密碼),查詢應(yīng)答,輸出2字節(jié)地址)
	ULONG			iIndex,  // 指定USB2I2C設(shè)備序號
	ULONG			iCommand,  // 操作命令碼
	PVOID			iPasswdBuf,  // 指向一個緩沖區(qū),提供8字節(jié)的密碼數(shù)據(jù)
	ULONG			iAddress )  // 指定操作地址或者密碼后的2字節(jié)數(shù)據(jù)
{
	UCHAR	mBuffer[ mUSBIO_PACKET_LENGTH ];
	ULONG	i, mLength;
	i = 0;
	mBuffer[ i++ ] = mUSBIOSS_CMD_I2C_STREAM;  // 命令碼
	mBuffer[ i++ ] = mUSBIOSS_CMD_I2C_STM_STA;  // 產(chǎn)生起始位
	mBuffer[ i++ ] = (UCHAR)( mUSBIOSS_CMD_I2C_STM_OUT | 9 );  // 輸出數(shù)據(jù),位5-位0為長度,9字節(jié)
	mBuffer[ i++ ] = (UCHAR)iCommand;  // 操作命令碼
	memcpy( &mBuffer[ i ], iPasswdBuf, 8 );  // 8字節(jié)密碼數(shù)據(jù)
	i += 8;
	mBuffer[ i++ ] = (UCHAR)( mUSBIOSS_CMD_I2C_STM_MS | 10 );  // 以亳秒為單位延時(shí),位3-位0為延時(shí)值,延時(shí)10毫秒
	mBuffer[ i++ ] = mUSBIOSS_CMD_I2C_STM_END;  // 當(dāng)前包提前結(jié)束
	mLength = i;
	if ( USBIO_WriteData( iIndex, mBuffer, &mLength ) ) {  // 寫出數(shù)據(jù)塊
		if ( X76F640_AckPolling( iIndex ) ) {  // 查詢應(yīng)答有效
			i = 0;
			mBuffer[ i++ ] = mUSBIOSS_CMD_I2C_STREAM;  // 命令碼
			mBuffer[ i++ ] = (UCHAR)( mUSBIOSS_CMD_I2C_STM_OUT | 2 );  // 輸出數(shù)據(jù),位5-位0為長度
			mBuffer[ i++ ] = (UCHAR)( iAddress & 0x00FF );  // 地址低8位
			mBuffer[ i++ ] = (UCHAR)( ( iAddress >> 8 ) & 0x00FF );  // 地址高8位

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人免费看视频| 日韩中文字幕av电影| 国产成人啪免费观看软件| 久久综合九色综合欧美98| 韩国v欧美v亚洲v日本v| 久久综合99re88久久爱| 国产宾馆实践打屁股91| 自拍偷拍国产精品| 欧美亚男人的天堂| 蜜桃久久久久久| 久久午夜老司机| 99在线精品视频| 亚洲国产精品视频| 精品国产亚洲在线| 成人v精品蜜桃久久一区| 亚洲蜜臀av乱码久久精品| 欧美高清你懂得| 狠狠色丁香婷综合久久| 亚洲国产精品高清| 精品污污网站免费看| 久久99在线观看| 综合色中文字幕| 欧美一级艳片视频免费观看| 国产一区二区不卡在线| 亚洲久本草在线中文字幕| 911精品国产一区二区在线| 国产一区二区不卡老阿姨| 亚洲另类一区二区| 精品免费视频.| 色综合欧美在线| 精品亚洲aⅴ乱码一区二区三区| 亚洲国产岛国毛片在线| 欧美肥妇free| caoporm超碰国产精品| 七七婷婷婷婷精品国产| 国产精品乱码久久久久久| 欧美日韩一区 二区 三区 久久精品 | 亚洲人吸女人奶水| 91精品国产色综合久久不卡电影| 国产.欧美.日韩| 日本不卡视频一二三区| 另类小说图片综合网| 综合分类小说区另类春色亚洲小说欧美 | 中文av一区特黄| 欧美一区二区三区免费| av亚洲精华国产精华| 麻豆精品国产91久久久久久| 亚洲精品视频一区二区| 久久久99免费| 日韩一区和二区| 欧美在线制服丝袜| 97精品久久久午夜一区二区三区| 六月丁香综合在线视频| 午夜影院久久久| 亚洲乱码国产乱码精品精98午夜| 久久精品亚洲麻豆av一区二区 | 蜜臀va亚洲va欧美va天堂| 亚洲人成在线播放网站岛国| 久久影音资源网| 91麻豆精品国产91| 欧美专区在线观看一区| 99久久精品久久久久久清纯| 国产一区二区91| 久久99久久99小草精品免视看| 亚洲综合久久av| 亚洲欧洲中文日韩久久av乱码| 国产欧美一区二区在线观看| 久久婷婷久久一区二区三区| 日韩免费观看高清完整版在线观看| 欧美三日本三级三级在线播放| 99re热这里只有精品视频| 高清视频一区二区| 粉嫩蜜臀av国产精品网站| 国产精品一色哟哟哟| 久久精品国产一区二区三| 蜜臀av在线播放一区二区三区| 午夜精品久久久久影视| 亚洲成人先锋电影| 亚洲第一综合色| 丝瓜av网站精品一区二区 | 成人亚洲一区二区一| 国产在线看一区| 国产乱子伦一区二区三区国色天香| 青青草原综合久久大伊人精品 | 美女被吸乳得到大胸91| 久久超碰97人人做人人爱| 激情另类小说区图片区视频区| 青青草成人在线观看| 精品一区二区三区在线播放 | 精品国产一区二区精华| 精品成人在线观看| 青椒成人免费视频| 美女mm1313爽爽久久久蜜臀| 另类小说一区二区三区| 国产老妇另类xxxxx| 成人免费观看av| 色综合久久综合中文综合网| 欧美丝袜丝交足nylons图片| 91麻豆精品国产91久久久使用方法 | 欧美日韩久久一区| 欧美一级黄色大片| 久久精品亚洲乱码伦伦中文| |精品福利一区二区三区| 亚洲午夜久久久久久久久电影网| 婷婷丁香久久五月婷婷| 国产主播一区二区三区| 94色蜜桃网一区二区三区| 欧美亚洲一区二区在线观看| 日韩欧美中文字幕精品| 国产亚洲人成网站| 亚洲免费观看高清完整版在线观看熊| 亚洲一区二区三区四区不卡| 蜜臀av性久久久久蜜臀aⅴ| 国产成人综合在线| 欧洲精品一区二区三区在线观看| 91精品国产综合久久精品麻豆| 2020日本不卡一区二区视频| 亚洲少妇最新在线视频| 日本欧美一区二区在线观看| 国产91精品精华液一区二区三区 | 一本到不卡精品视频在线观看| 欧美日本一区二区三区四区 | 99久久精品一区二区| 777a∨成人精品桃花网| 国产精品视频一二三区| 日本欧美韩国一区三区| 99久久国产综合色|国产精品| 884aa四虎影成人精品一区| 国产欧美一区二区三区鸳鸯浴| 亚洲国产人成综合网站| 国产精品99久久久久久久女警| 欧美三区在线观看| 亚洲欧洲一区二区三区| 麻豆高清免费国产一区| 在线观看亚洲专区| 国产蜜臀av在线一区二区三区| 亚洲成va人在线观看| 成人黄色a**站在线观看| 欧美一区二区免费观在线| 亚洲免费三区一区二区| 在线观看亚洲专区| 欧美三级欧美一级| 国产精品久久久久影院亚瑟| 美国精品在线观看| 欧美亚洲综合色| 自拍视频在线观看一区二区| 欧美日韩国产成人在线免费| 国产精品久久久久影院亚瑟| 国内精品写真在线观看| 69堂成人精品免费视频| 亚洲最新视频在线观看| hitomi一区二区三区精品| 久久天天做天天爱综合色| 美女视频黄a大片欧美| 欧美精品在线一区二区三区| 亚洲黄色小视频| 99久久综合精品| 国产精品卡一卡二卡三| 国产**成人网毛片九色| 国产色爱av资源综合区| 国产精品一二三四| 久久丝袜美腿综合| 国产成人亚洲综合a∨婷婷图片| 欧美一区午夜精品| 秋霞影院一区二区| 欧美一级免费观看| 日本欧美一区二区三区| 欧美一区二区三级| 蜜臀av亚洲一区中文字幕| 69久久99精品久久久久婷婷| 日韩国产在线观看一区| 欧美精品777| 日本网站在线观看一区二区三区| 欧美喷潮久久久xxxxx| 日日欢夜夜爽一区| 欧美一级生活片| 黑人精品欧美一区二区蜜桃| 精品国产乱码久久久久久老虎| 久久精品国产澳门| 精品99一区二区| 粉嫩一区二区三区在线看 | 久久嫩草精品久久久精品一| 国产精品中文字幕日韩精品| 国产蜜臀av在线一区二区三区| 成人激情开心网| 亚洲精品久久嫩草网站秘色| 欧美日韩中文字幕一区| 免费人成精品欧美精品| 精品对白一区国产伦| 成人视屏免费看| 一区二区三区在线观看视频| 91麻豆精品国产91久久久| 黄色精品一二区| 亚洲欧美在线aaa| 欧美乱妇15p| 国产在线播精品第三| 亚洲色欲色欲www在线观看| 8x福利精品第一导航| 高清国产一区二区| 亚洲一卡二卡三卡四卡无卡久久|