2024年4月24日发(作者:)
CH341中文手册(二)
1
USB总线转接芯片CH341
中文手册(二):并口及同步串口说明
版本:2C
1、并口功能说明
1.1. 一般说明
CH341的并口是主动式并口,在计算机端的程序控制下,可以直接从外部电路输入输出数据,一
般不需要外接单片机/DSP/MCU。
CH341的并口主要有2种接口方式:EPP方式和MEM方式。EPP方式类似于EPP V1.7或者EPP V1.9
规范,MEM方式类似于INTEL时序存储器的读写方式。芯片复位后的默认方式是EPP,在USB配置完
成后,计算机端的程序可以随时控制CH341在上述2种方式之间进行切换。另外还有一种BUS方式,
以地址和数据复用总线的方式提供7位地址和8位数据。
1.2. EPP并口
EPP并口的主要引脚包括WR#引脚、DS#引脚、AS#引脚、WAIT#引脚,相关信号的时序说明可以参
照EPP规范V1.7和V1.9。
EPP方式通过WR#、DS#和AS#的逻辑组合执行具体操作。WR#用于指示当前的数据或地址传输方
向,对计算机端而言,高电平是对外部电路执行读操作,低电平是对外部电路执行写操作。选通信号
是低电平有效的脉冲信号,选通信号包括数据选通DS#和地址选通AS#,DS#有效执行数据操作,AS#
有效执行地址操作。EPP的实际操作发生于选通信号有效期间,例如:在WR#为高电平期间DS#输出
脉冲,则执行一个数据读操作;在WR#为低电平期间AS#输出脉冲,则执行一个地址写操作。
CH341A的EPP数据读写操作DS#支持WAIT#等待信号,在CH341开始输出低电平选通信号后,如
果WAIT#为低电平,那么选通信号将继续保持低电平直到WAIT#恢复为高电平或者85uS等待超时后才
结束输出。
CH341A的EPP地址读写操作AS#不支持WAIT#等待信号,所以EPP地址读写操作比数据读写操作
略快一些。
写操作的选通信号的低电平有效宽度最小是0.16uS或者0.25uS,读操作的选通信号的低电平有
效宽度最小是0.25uS或者0.33uS,理想状态下的最大传输速度是800KB/S,在WINDOWS XP SP2环境
下使用连续的大数据块进行速度测试,实测传输速度约为:下传510KB/S,上传560KB/S。
1.3. MEM并口
MEM并口的主要引脚包括WR#引脚、RD#引脚(DS#引脚的别名)、A0引脚(AS#引脚的别名)、WAIT#
引脚。
MEM方式类似于存储器的读写方式,WR#和RD#都是低电平有效的脉冲信号。MEM的实际操作发生
于WR#或者RD#有效期间,对计算机端而言,当WR#有效时对外部电路执行写操作,当RD#有效时对外
部电路执行读操作。A0用于指示当前读写操作的地址,例如:将A0和A0的反相分别用于两个外部
设备的片选;或者将A0=1时的操作指向外部设备的命令端口,而将A0=0时的操作指向数据端口。
CH341A的MEM读写操作支持WAIT#等待信号。
WR#的低电平有效宽度最小是0.25uS,RD#的低电平有效宽度最小是0.33uS,理想状态下的最大
传输速度是800KB/S。实测传输速度与EPP数据读写差不多,但略低于EPP地址读写操作的速度。
1.4. BUS并口
(该功能未经完全测试)
BUS并口的主要引脚包括WR#引脚、RD#引脚(DS#引脚的别名)、ALE引脚(AS#引脚的别名)、WAIT#
引脚。
CH341中文手册(二)
2
BUS方式相当于更多地址线的MEM方式,WR#和RD#都是低电平有效的脉冲信号,在每次读写脉冲
发生之前,数据总线D0-D7先输出7位将要操作的目标地址,接着ALE信号输出高电平,使外部的地
址锁存器电路(例如74LS373)将7位地址锁存后输出,用于外部设备的片选,然后,WR#或RD#其中
之一输出有效的读写脉冲。BUS的实际读写操作发生于WR#或者RD#有效期间,对计算机端而言,当
WR#有效时对外部电路执行写操作,当RD#有效时对外部电路执行读操作。
CH341A的BUS读写操作支持WAIT#等待信号。
WR#的低电平有效宽度最小是0.33uS,RD#的低电平有效宽度最小是0.51uS,理想状态下的最大
传输速度是300KB/S,但在进行多个I/O地址的独立读写操作时速度可能只有1K/S。
1.5. 辅助引脚
辅助引脚包括RST#引脚和INT#引脚,以及ERR#、SLCT、PEMP等引脚。
RST#引脚是复位输出引脚,当其为低电平时,说明CH341芯片正在复位或者计算机端的程序要求
复位外部电路。INT#引脚是中断请求输入引脚,当其检测到上升沿时,计算机端的程序将会收到中断
通知。其它引脚都是自定义的通用输入引脚,计算机端的应用程序可以查询其引脚状态。
2、同步串口功能说明
2.1. 一般说明
CH341的同步串口是主动式串口,只能作为Host/Master主机端,在计算机端的程序控制下,可
以直接从外部电路输入输出数据,一般不需要外接单片机/DSP/MCU。
CH341A采用FlexWire(TM)技术,通过计算机相关程序控制进行组合可以实现:2线串口、4线
串口、5线串口,其中以2线串口及4线串口较为常用。
2.2. 2线串口
2线串口的主要引脚包括SCL引脚、SDA引脚。SCL用于单向输出同步时钟,开漏输出且内置上
拉电阻,SDA用于准双向数据输入输出,开漏输出及输入且内置上拉电阻。
2线串口的基本操作元素包括:起始位、停止位、位输出、位输入。
起始位定义为当SDA为高电平时,SCL输出下降沿(从高电平切换为低电平)。
停止位定义为当SDA为高电平时,SCL输入上升沿(从低电平切换为高电平)。
位输出定义为当SCL为低电平时,SDA输出位数据,然后SCL输出高电平脉冲。
位输入定义为SCL输出高电平脉冲,在下降沿之前从SDA输入位数据。
字节输出定义为8个位输出及1个位输入用于应答。
字节输入定义为8个位输入及1个位输出用于应答。
2线串口的数据输入和输出以字节为单位,每个字节含8个位,高位在前。
CH341的2线串口支持两线串口的A/D、D/A、存储器及I/O扩展芯片。例如,常见的24C系列串
行EEPROM:24C01A到24C16、24C32到24C1024等。
2.3. 4线串口
(该功能未经完全测试)
4线串口的主要引脚包括DCK引脚、DIN引脚、DOUT引脚、片选引脚CS0、CS1、CS2。DCK用于
单向输出同步时钟,DIN用于单向输入数据,DOUT用于单向输出数据,片选引脚CSn用于选择设备。
4线串口的基本操作元素包括:片选选中、片选结束、位输出、位输入。
片选选中定义为片选引脚CSn输出有效电平(可以定义为高电平或低电平)。
片选结束定义为片选引脚CSn输出非有效电平。
位输出定义为当DCK为低电平时,DOUT输出位数据,然后DCK输出高电平脉冲。
位输入定义为当DCK为高电平时,从DIN输入位数据。
字节输出定义为8个位输出,字节输入定义为8个位输入。
CH341中文手册(二)
3
4线串口的数据输入和输出以字节为单位,每个字节含8个位,支持低位在前和高位在前。
2.4. 5线串口
(该功能未经完全测试)
5线串口的主要引脚包括DCK引脚、DIN引脚、DIN2引脚、DOUT引脚、DOUT2引脚、片选引脚CS0、
CS1、CS2。DCK用于单向输出同步时钟,DIN和DIN2用于单向输入数据,DOUT和DOUT2用于单向输
出数据,片选引脚CSn用于选择外部设备。
5线串口是4线串口中增加一组数据输入DIN2和一组数据输出DOUT2的版本。
5线串口的基本操作元素包括:片选选中、片选结束、双位输出、双位输入。
双位输出定义为当DCK为低电平时,DOUT和DOUT2输出位数据,然后DCK输出高电平脉冲。一
个字节8位数据,高4位从DOUT输出,低4位从DOUT2输出。
双位输入定义为当DCK为高电平时,从DIN和DIN2输入位数据。一个字节8个数据,高4位来
自DIN输入,低4位来自DIN2输入。
字节输出定义为一个字节8位分为两组各4位分别输出。
字节输入定义为分别输入两组各4位组合成一个字节。
5线串口的数据输入和输出以半字节为单位,每个半字节含4个位,支持低位在前和高位在前。
要分别在DOUT和DOUT2产生字节输出,那么需要两个字节输出组合。
CH341的5线串口用于仿真具有较多I/O的同步串行接口。
2.5. 位操作
(该功能未经完全测试)
正常情况下,CH341的同步串口操作是以字节为基本单位的,一次操作可能是1个字节或者几个
甚至几十个字节。而实际应用中可能需要输入或者输出非8倍数的数据位,例如某A/D采集芯片需要
输入10位数据,为了方便这种应用,CH341的FlexWire(TM)技术提供了一个基本操作,能够一次
输入或者输出1位数据,重复使用该操作能够输入2位数据,再加上一个字节操作,从而实现10位
数据的输入输出。该方法仅适用于4线串口或者5线串口,能够控制DCK、DOUT、DOUT2、CS0、CS1、
CS2引脚产生一个位输出,能够从DCK、DIN、DIN2、DOUT、DOUT2、CS0、CS1、CS2引脚实现一个位
输入。
2.6. 辅助引脚
同步串口应用下的辅助引脚与并口应用下的相同,请参考并口功能说明。
3、计算机端的软件
在计算机端的Windows操作系统下,CH341的并口驱动程序和动态链接库DLL向应用程序提供了
应用层接口,包括:设备管理API、并口数据传输API、同步串口数据传输API、中断处理API。
有关API参数的说明请参考CH341DLL.H,主要API如下。
3.1. 设备管理API
CH341OpenDevice( // 打开CH341设备,返回句柄,出错则无效
ULONG iIndex ); // 指定CH341设备序号,0对应第一个设备
将CH341作为设备,使用前必须先打开,然后才能使用
CH341CloseDevice( // 关闭CH341设备
ULONG iIndex ); // 指定CH341设备序号
用完CH341后,或者应用程序退出前,应该关闭CH341设备
CH341中文手册(二)
4
CH341SetDeviceNotify( // 设定设备事件通知程序
ULONG iIndex, // 指定CH341设备序号,0对应第一个设备
PCHAR iDeviceID, // 可选参数,指向字符串,指定被监控的设备的ID,字符串以0终止
mPCH341_NOTIFY_ROUTINE iNotifyRoutine ); // 指定设备事件回调程序
用于应用程序监控CH341设备的插拔事件,确保应用程序随时知道USB设备是否存在,防止在USB设
备拔出后收发数据,并及时响应USB设备的插入
CH341GetStatus( // 通过CH341直接输入数据和状态,类似的API还有CH341GetInput
ULONG iIndex, // 指定CH341设备序号
PULONG iStatus ); // 指向一个双字单元,用于保存状态数据
获取的状态数据中:位7-位0对应CH341的D7-D0引脚,位8对应CH341的ERR#引脚,位9对应CH341
的PEMP引脚,位10对应CH341的INT#引脚,位11对应CH341的SLCT引脚,位13对应CH341的
BUSY/WAIT#引脚,位14对应CH341的AUTOFD#/DATAS#引脚,位15对应CH341的SLCTIN#/ADDRS#引
脚,位23对应CH341的SDA引脚
CH341SetOutput( // 设置CH341的I/O方向,并通过CH341直接输出数据
// 谨慎使用该API,防止修改I/O方向使输入引脚变为输出导致与其它输出引脚之间短路而损坏
ULONG iIndex, // 指定CH341设备序号
ULONG iEnable, // 数据有效标志
ULONG iSetDirOut, // 设置I/O方向,位清0则对应引脚为输入,位置1则对应引脚为输出
ULONG iSetDataOut ); // 输出数据,如果I/O方向为输出,那么位数据将通过引脚输出
上述的I/O方向和输出数据以32位数据表示,其中:位7-位0对应CH341的D7-D0引脚,位8对应
CH341的ERR#引脚,位9对应CH341的PEMP引脚,位10对应CH341的INT#引脚,位11对应CH341
的SLCT引脚,位13对应CH341的WAIT#引脚,位14对应CH341的DATAS#/READ#引脚,位15对应
CH341的ADDRS#/ADDR/ALE引脚
另外,以下引脚只能输出,不考虑I/O方向:位16对应CH341的RESET#引脚,位17对应CH341的
WRITE#引脚,位18对应CH341的SCL引脚,位29对应CH341的SDA引脚
CH341Set_D5_D0( // 设置CH341的D5-D0引脚的I/O方向,并通过D5-D0引脚直接输出数据
// 谨慎使用该API,防止修改I/O方向使输入引脚变为输出导致与其它输出引脚之间短路而损坏
ULONG iIndex, // 指定CH341设备序号
ULONG iSetDirOut, // 设置D5-D0各引脚的I/O方向,清0则引脚为输入,置1则引脚为输出
ULONG iSetDataOut ); // 设置D5-D0各引脚的输出数据,仅当I/O方向为输出时生效
3.2. 中断处理API
CH341SetIntRoutine( // 设定中断服务程序
ULONG iIndex, // 指定CH341设备序号
mPCH341_INT_ROUTINE iIntRoutine ); // 指定中断服务程序,为NULL则取消中断服务
设置CH341的中断服务程序,iIntRoutine是一个符合mPCH341_INT_ROUTINE格式的子程序,
当CH341的INT#引脚出现上升沿时,DLL自动调用iIntRoutine,并向其提供一个引脚状态参数,
引脚状态参数中,位为1则说明对应的引脚为高电平,位为0则说明对应的引脚为低电平,
位7-位0对应CH341的D7-D0引脚,位8对应CH341的ERR#引脚,位9对应CH341的PEMP引脚,
位10对应CH341的INT#引脚,位11对应CH341的SLCT引脚
例如:主程序
main {
......
CH341OpenDevice( 0 ); // 打开设备,针对0#设备,如果有多个,可以计数
CH341SetIntRoutine( 0, myInterruptEvent ); // 设置中断服务程序
CH341中文手册(二)
5
......读写数据,或者在接收到中断服务程序的通知后处理中断
CH341CloseDevice( 0 ); // 用完后关闭设备
}
中断服务程序,当CH341的INT#引脚出现上升沿时,DLL会自动调用该子程序
void CALLBACK myInterruptEvent ( unsigned long PinStatus ) {
if ( PinStatus & mStateBitERR ) printf(“发生中断时ERR#引脚为高电平”);
else printf(“发生中断时ERR#引脚为低电平”);
......自己处理或者通知主程序处理
}
3.3. 并口数据传输API
CH341InitParallel( // 复位并初始化并口,RST#输出低电平脉冲
ULONG iIndex, // 指定CH341设备序号
ULONG iMode ); // 指定并口模式: 0为EPP模式, 2为MEM模式, >=256 保持当前模式
在CH341上电时自动初始化并口,如果需要,也可以重新初始化并口,以清除缓冲区。
在初始化过程中,RST#引脚会输出100uS左右宽度的低电平脉冲,用于通知外部设备复位,
CH341EppReadData( // EPP方式读数据: WR#=1, DS#=0, AS#=1, D0-D7=input
ULONG iIndex, // 指定CH341设备序号
PVOID oBuffer, // 指向一个足够大的缓冲区,用于保存读取的数据
PULONG ioLength ); // 指向长度单元,输入时为准备读取的长度,返回后为实际读取的长度
以EPP时序连续读取数据,长度为0到4096字节,例如:
UCHAR buf[1024];
ULONG len=1024;
CH341EppReadData( 0, buf, &len ); // 针对0#设备以EPP方式读取1KB数据
CH341EppReadAddr( // EPP方式读地址: WR#=1, DS#=1, AS#=0, D0-D7=input
ULONG iIndex, // 指定CH341设备序号
PVOID oBuffer, // 指向一个足够大的缓冲区,用于保存读取的地址数据
PULONG ioLength ); // 指向长度单元,输入时为准备读取的长度,返回后为实际读取的长度
以EPP时序连续读取地址数据,长度为0到4096字节,在标准EPP时序中通常用不到
CH341EppWriteData( // EPP方式写数据: WR#=0, DS#=0, AS#=1, D0-D7=output
ULONG iIndex, // 指定CH341设备序号
PVOID iBuffer, // 指向一个缓冲区,放置准备写出的数据
PULONG ioLength ); // 指向长度单元,输入时为准备写出的长度,返回后为实际写出的长度
以EPP时序连续写出数据,长度为0到4096字节,例如:
UCHAR buf[1024];
ULONG len=1024;
在buf中放置数据,准备以EPP方式写出
CH341EppWriteData( 0, buf, &len ); // 针对0#设备以EPP方式写出1KB数据
CH341EppWriteAddr( // EPP方式写地址: WR#=0, DS#=1, AS#=0, D0-D7=output
ULONG iIndex, // 指定CH341设备序号
PVOID iBuffer, // 指向一个缓冲区,放置准备写出的地址数据
PULONG ioLength ); // 指向长度单元,输入时为准备写出的长度,返回后为实际写出的长度
以EPP时序连续写出地址数据,长度为0到4096字节,在标准EPP时序中通常只写一个字节的地址
CH341中文手册(二)
6
CH341EppSetAddr( // EPP方式设置地址: WR#=0, DS#=1, AS#=0, D0-D7=output
ULONG iIndex, // 指定CH341设备序号
UCHAR iAddr ); // 指定EPP地址
以EPP时序输出一个地址,是CH341EppWriteAddr的简化
CH341MemReadAddr0( // MEM方式读地址0: WR#=1, DS#/RD#=0, AS#/ADDR=0, D0-D7=input
ULONG iIndex, // 指定CH341设备序号
PVOID oBuffer, // 指向一个足够大的缓冲区,用于保存从地址0读取的数据
PULONG ioLength ); // 指向长度单元,输入时为准备读取的长度,返回后为实际读取的长度
以MEM时序连续读取数据,长度为0到4096字节,读操作期间ADDR=0,例如:
UCHAR buf[1024];
ULONG len=1024;
CH341MemReadAddr0( 0, buf, &len ); // 针对0#设备以MEM方式从地址0读取1K数据
CH341MemReadAddr1( // MEM方式读地址1: WR#=1, DS#/RD#=0, AS#/ADDR=1, D0-D7=input
ULONG iIndex, // 指定CH341设备序号
PVOID oBuffer, // 指向一个足够大的缓冲区,用于保存从地址1读取的数据
PULONG ioLength ); // 指向长度单元,输入时为准备读取的长度,返回后为实际读取的长度
以MEM时序连续读取数据,长度为0到4096字节,读操作期间ADDR=1
CH341MemWriteAddr0( // MEM方式写地址0: WR#=0, DS#/RD#=1, AS#/ADDR=0, D0-D7=output
ULONG iIndex, // 指定CH341设备序号
PVOID iBuffer, // 指向一个缓冲区,放置准备向地址0写出的数据
PULONG ioLength ); // 指向长度单元,输入时为准备写出的长度,返回后为实际写出的长度
以MEM时序连续写出数据,长度为0到4096字节,写操作期间ADDR=0,例如:
UCHAR buf[1024];
ULONG len=1024;
在buf中放置数据,准备以MEM方式写出
CH341MemWriteAddr0( 0, buf, &len ); // 针对0#设备以MEM方式向地址0写出1K数据
CH341MemWriteAddr1( // MEM方式写地址1: WR#=0, DS#/RD#=1, AS#/ADDR=1, D0-D7=output
ULONG iIndex, // 指定CH341设备序号
PVOID iBuffer, // 指向一个缓冲区,放置准备向地址1写出的数据
PULONG ioLength ); // 指向长度单元,输入时为准备写出的长度,返回后为实际写出的长度
以MEM时序连续写出数据,长度为0到4096字节,写操作期间ADDR=1
3.4. 同步串口数据传输API
CH341ReadI2C( // 从两线串口读取一个字节数据,仅适用于7位地址的设备
ULONG iIndex, // 指定CH341设备序号
UCHAR iDevice, // 低7位指定设备地址
UCHAR iAddr, // 指定数据单元的地址
PUCHAR oByte ); // 指向一个字节单元,用于保存读取的字节数据
CH341WriteI2C( // 向两线串口写入一个字节数据,仅适用于7位地址的设备
ULONG iIndex, // 指定CH341设备序号
UCHAR iDevice, // 低7位指定设备地址
UCHAR iAddr, // 指定数据单元的地址
UCHAR iByte ); // 待写入的字节数据
CH341中文手册(二)
7
CH341WriteRead( // 执行数据流命令,先输出再输入
ULONG iIndex, // 指定CH341设备序号
ULONG iWriteLength, // 写长度,准备写出的长度
PVOID iWriteBuffer, // 指向一个缓冲区,放置准备写出的数据
ULONG iReadStep, // 准备读取的单个块的长度, 总长度为(iReadStep*iReadTimes)
ULONG iReadTimes, // 准备读取的次数
PULONG oReadLength, // 指向长度单元,返回后为实际读取的长度
PVOID oReadBuffer ); // 指向一个足够大的缓冲区,用于保存读取的数据
先输出数据再输入数据,执行数据流命令,适用于同步串口等。
CH341SetStream( // 设置同步串口流模式
ULONG iIndex, // 指定CH341设备序号
ULONG iMode ); // 指定模式,见下行
// 位1位0: I2C速度/SCL频率, 00=低速20KHz,01=标准100KHz,10=快速400KHz,11=高速750KHz
// 位2: SPI的I/O数/IO引脚, 0=单入单出(4线接口),1=双入双出(5线接口)
// 位7: SPI字节中的位顺序, 0=低位在前, 1=高位在前
// 其它保留,必须为0
CH341StreamI2C( // 处理两线串口的数据流,适用于所有两线串口的设备
ULONG iIndex, // 指定CH341设备序号
ULONG iWriteLength, // 准备写出的数据字节数
PVOID iWriteBuffer, // 指向缓冲区,放置准备写出的数据,首字节是设备地址及读写位
ULONG iReadLength, // 准备读取的数据字节数
PVOID oReadBuffer ); // 指向缓冲区,返回后是读入的数据
对两线串口设备进行操作。例如,从24C256中3200H开始的地址读出256字节的数据:
UCHAR OutBuf[5], InBuf[300]; // 待写数据缓冲区,读出数据缓冲区
OutBuf[0]=0xA1; OutBuf[1]=0x32; OutBuf[2]=0x00; // 待写数据:设备地址及单元地址
CH341StreamI2C( 0, 3, OutBuf, 256, InBuf ); // 针对0#设备处理两线串口的数据流
CH341ReadEEPROM( // 从EEPROM中读取数据块,速度约56K字节
ULONG iIndex, // 指定CH341设备序号
EEPROM_TYPE iEepromID, // 指定EEPROM型号
ULONG iAddr, // 指定数据单元的地址
ULONG iLength, // 准备读取的数据字节数
PUCHAR oBuffer ); // 指向一个缓冲区,返回后是读入的数据
读写EEPROM的API支持从24C01到24C16和从24C32到24C4096的各种型号的EEPROM存储器。
CH341WriteEEPROM( // 向EEPROM中写入数据块
ULONG iIndex, // 指定CH341设备序号
EEPROM_TYPE iEepromID, // 指定EEPROM型号
ULONG iAddr, // 指定数据单元的地址
ULONG iLength, // 准备写出的数据字节数
PUCHAR iBuffer ); // 指向一个缓冲区,放置准备写出的数据
CH341StreamSPI4( // 处理SPI数据流,4线接口,速度约68K字节
// SPI时序: DCK时钟输出, 默认为低, DOUT在时钟上升沿之前输出, DIN在时钟下降沿之后输入
ULONG iIndex, // 指定CH341设备序号
ULONG iChipSelect, // 片选控制, 位7为0则忽略片选控制, 位7为1则参数有效
ULONG iLength, // 准备传输的数据字节数
CH341中文手册(二)
8
PVOID ioBuffer ); // 缓冲区,放置准备从DOUT写出的数据,返回后是从DIN读入的数据
有关DLL中各个API的使用实例请参考CH341评估板资料中的各个源程序及例子。
4、参数
4.1. MEM方式时序参数
(测试条件:TA=25℃,参考附图前半部分)
名称
TWMEM
TRMEM
TAS
TAH
TDS
TDH
TIS
TIH
MEM
EPP
参数说明
写选通WR#的低电平有效宽度
读选通RD#的低电平有效宽度
WR#或RD#有效前的地址建立时间
WR#或RD#有效后的地址保持时间
WR#有效前的数据输出建立时间
WR#有效后的数据输出保持时间
RD#无效前的数据输入建立时间
RD#无效后的数据输入保持时间
最小值
230
300
80
230
80
300
170
0
典型值
250
330
最大值
100000
100000
单位
nS
nS
nS
nS
nS
nS
nS
nS
4.2. EPP方式时序参数
(测试条件:TA=25℃,参考附图后半部分)
名称
TWEPPD
TWEPPA
TREPPD
TREPPA
TXS
TXH
TDS
TDH
参数说明
数据写操作的选通的低电平有效宽度
地址写操作的选通的低电平有效宽度
数据读操作的选通的低电平有效宽度
地址读操作的选通的低电平有效宽度
选通有效前的方向WR#建立时间
选通有效后的方向WR#保持时间
选通有效前的数据输出建立时间
选通有效后的数据输出保持时间
最小值
220
150
300
220
500
150
80
220
典型值
250
160
330
250
最大值
100000
10000
100000
10000
单位
nS
nS
nS
nS
nS
nS
nS
nS
CH341中文手册(二)
TIS
TIH
9
选通无效前的数据输入建立时间
选通无效后的数据输入保持时间
170
0
nS
nS
4.3. BUS方式时序参数
(测试条件:TA=25℃,参考下图,数值单位为nS)
5、应用
5.1. 基本连接
(下图)
P4是USB端口,USB总线包括一对5V电源线和一对数据信号线,通常,+5V电源线是红色,接
地线是黑色,D+信号线是绿色,D-信号线是白色。USB总线提供的电源电流最大可以达到500mA,一
般情况下,CH341芯片和低功耗的USB产品可以直接使用USB总线提供的5V电源。如果USB产品通
过其它供电方式提供常备电源,那么CH341也应该使用该常备电源,如果需要同时使用USB总线的电
源,那么可以通过阻值约为1Ω的电阻连接USB总线的5V电源线与USB产品的5V常备电源,并且两
者的接地线直接相连接。
电容C18用于CH341内部电源节点退耦,C18是容量为0.01μF的独石或高频瓷片电容。电容C19
和C20用于外部电源退耦,C19是容量为0.1μF的独石或高频瓷片电容。晶体X4、电容C16和C17
用于时钟振荡电路。X4的频率是12MHz,C16和C17是容量为15pF~30pF的独石或高频瓷片电容。
在设计印刷线路板PCB时,需要注意:退耦电容C18和C19尽量靠近CH341的相连引脚;使D+
和D-信号线贴近平行布线,尽量在两侧提供地线或者覆铜,减少来自外界的信号干扰;尽量缩短XI
和XO引脚相关信号线的长度,为了减少高频干扰,可以在相关元器件周边环绕地线或者覆铜。
图中SDA引脚直接接地,所以CH341工作于并口方式。
CH341中文手册(二)
10
5.2. EPP并口方式应用
(下图)
图中使用非门以及或门进行译码,产生较多的控制信号,如果实际应用只需要较少的输入和输出,
那么可以省去这些译码,而直接使用AS#、DS#等控制信号进行简单的实现。
5.3. MEM并口方式应用
(下图)
图中尚未用到A0引脚(AS#引脚),可以实现8位数字信号输入和8位数字信号输出。如果使用
A0控制74LS139分别对-READ和-WRITE进行地址片选,那么CH341可以连接两组74LS244+74LS273,
从而实现16位数字信号输入和16位数字信号输出。
CH341中文手册(二)
11
5.4. 两线同步串口应用
(下图)
2线同步串口支持多个设备的地址识别,采用数据流方式读写数据,支持一次读写较大的数据块。
CH341的两线串口支持20KHz/100KHz/400KHz/750KHz的速度,与具有硬件两线串口的设备连接时可
以选择较高的速度,与软件模拟两线串口的单片机连接时只能选择较低的速度(例如20KHz)。
图中使用电阻R4强制ACT#引脚在CH341功能配置期间为低电平,从而禁止CH341配置时访问2
线同步串口而影响总线上的其它设备,如果不需要LED显示,那么可以省去电阻R3和发光管L2,并
且可以将R4接RST#端改为接GND。
5.5. BUS并口方式应用
(下图)
图中用ALE控制U23锁存得到7位地址A0-A6,可以用于驱动存储器或再次译码产生多个片选。
5.6. 数字输入输出
(下图)
如果只需要少于8个的输入输出引脚,那么还可以省掉外部的各种74LS器件,直接使用CH341
的D7~D0以及其它引脚,通过调用DLL中的CH341Set_D5_D0等API实现简单的输入输出。


发布评论