linux串口插拔事件,Linux板USB串口通讯的插拔检测

项目开发中,在安装linux系统的ARM9板上,需要实时检测USB口与Windows客户端的连接和断开情况,从而中断命令的发送,由于USB的连接和数据交互使用的串口通讯,在板子启动的脚本就直接加载了g_serial.ko的模块,在dev目录下生成了ttyGS0的端口号。串口通讯中断端口地址也不会消失,因此,只有通过在一定时间内检测端口的读写状态来判断串口通讯是够正常,如超时则认为连接断开。

首先,打开串口

//以读写方式打开usb,尝试5次

int fd = -1;

for(int i=0;i<5;i++)

{

fd = open("/dev/ttyGS0", O_RDWR|O_NOCTTY);

if(fd<=0)

continue;//retry until reach 5 times

else

break;

}

由于使用g_serial.ko加载串口模块,不需要额外设置串口参数。

清空端口缓存

tcflush(fd, TCIOFLUSH); //clear port caches

创建线程收发端口数据

//创建USB收发线程

pthread_t tid;

pthread_create(&tid, NULL, Thread_USB_SendRecv, this);

线程函数如下

void* Thread_USB_SendRecv(void *pData)

{

usbserial* pUSBSerial = (usbserial*) pData;

while(true)

{

int nRet = pUSBSerial->ProcData();

if(nRet < 0)

{

//重启USB

pUSBSerial->ResetUSB();

}

}

QPRINT("Thread_USB_SendRecv DEAD!!!!");

return 0;

}

由于串口通讯使用的阻塞IO的模式,当返回的nRet<0时,认为usb通讯错误或断开了连接,因此需重启USB,重启操作即重新打开/dev/ttyGS0端口,如果能正常通讯则继续收发数据,这里不作为USB断开或拔出的判断。

USB拔出的判断只能在另一个监控线程处理超时,即规定时间内没有读取到数据则认为通讯断开或USB线拔出。这里使用一个计数器来设置,在read到数据后重置计数器。

ssize_t ReadForUSBHost(int fd, void* buf, size_t nbytes)

{

ssize_t nRead = read(fd, buf, nbytes);

if(nRead>0) m_nIdleCount = 0;//reset counter

return nRead;

}

监控线程即重新开辟一个线程每隔1秒钟比对一下计数器

int usbserial::CheckUSBPortConStatus()

{

//use m_nIdleCount to set timeout.

bool bRet = (m_nIdleCount++) < m_nTimeout;//超时时间,单位s

if( bRet != USB_GetLink() )

{

USB_SetLink( bRet );

if(bRet == false) // lose link

QPRINT("USB link timeout, only set flag....");

else // link again

QPRINT("USB get data again, ...");

}

return 1;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: CH340是一种常用的USB串口芯片,而Type-C是一种新型的通用接口,具备了更高的数据传输速率和更强的功率输送能力。设计CH340串口与Type-C相连的电路可以实现通过Type-C接口进行串口通信的功能。 首先,在设计电路时,需要引出CH340芯片的串口通信引脚,包括TXD(发送数据)、RXD(接收数据)、RTS(请求发送)和CTS(清除发送)。这些引脚需要连接到Type-C接口的对应引脚。 其次,还需要连接CH340芯片的供电引脚和Type-C接口的供电引脚,以确保芯片可以正常工作。通常,CH340需要3.3V的供电电压,因此可以从Type-C接口的Vbus引脚获取电源,并通过稳压芯片将其降压到3.3V。 此外,还需要将Type-C接口的CC引脚连接到CH340芯片的D+和D-引脚,用于识别Type-C接口的连接状态。在Type-C接口插入时,CC引脚的电压状态会发生变化,CH340芯片可以根据这个变化来判断接口的连接状态。 最后,在PCB设计中,需要合理布局电路元件和导线。要考虑到信号干扰、阻抗匹配和电源稳定等问题,确保电路的性能和稳定性。 综上所述,CH340串口与Type-C相连的电路设计需要考虑串口通信引脚的连接、供电引脚的连接、连接状态的识别以及电路布局等方面的问题。通过合理设计和布局,可以实现通过Type-C接口进行串口通信的功能。 ### 回答2: CH340是一款常用的USB串口芯片,而Type-C是一种通用的USB接口规范。将CH340串口与Type-C相连需要进行一定的电路设计。 首先,我们需要在电路中添加CH340芯片。CH340芯片有多种引脚,其中包括D+和D-用于USB数据传输,TXD和RXD用于串口数据传输等。需要将CH340的D+和D-引脚与Type-C的CC1和CC2引脚相连,以实现USB数据的传输。 其次,我们还需要添加逻辑电路来处理Type-C的插拔检测和供电控制。Type-C接口具有自动识别插入方向和工作模式的特点,因此我们需要使用电路来检测Type-C插入状态,并根据需求选择接口的工作模式。 为了实现Type-C插拔状态的检测,我们可以使用适当的电路来监测CC1和CC2引脚上的电压变化。当Type-C插入时,CC1和CC2引脚上的电压会有所变化,我们可以通过检测这种变化来判断Type-C的插入状态,并相应地控制CH340芯片的工作。 另外,为了实现供电控制,我们可以使用适当的电源管理芯片。当Type-C插入时,电源管理芯片可以检测到此事件,并相应地提供所需的电源给CH340芯片。 最后,还需要注意保护电路的设计。由于Type-C接口是热插拔的,因此我们需要加入适当的保护电路,以防止电流过载、过压等问题对电路和设备造成损害。 综上所述,CH340串口与Type-C相连的电路设计需要考虑到CH340芯片的引脚连接、Type-C插拔检测、供电控制和保护等方面。通过合理的电路设计,可以实现CH340芯片与Type-C接口的稳定连接和正常工作。 ### 回答3: CH340是一种常见的串口USB芯片,而Type-C接口是一种新型的通用接口标准。如果要将CH340串口与Type-C相连,需要进行相应的电路设计。 首先,我们需要借助Type-C插座,选择带有Type-C接口的插座。这样能够确保CH340能够与Type-C连接。 其次,需要在电路设计中加入CH340芯片,以实现串口USB的功能。CH340芯片包含了USB串口的控制逻辑和相关功能。 接下来,需要将CH340芯片与Type-C插座进行连接。CH340芯片的串口引脚需要连接到Type-C插座的相应引脚,这样就能够传输数据。 此外,为了确保正常工作,还需要在电路设计中加入一些必要的电路保护元件,例如限流电阻、短路保护电阻等。 设计完成后,可以通过PCB布局和焊接等步骤制作出实际的CH340串口与Type-C相连的电路。在连接电路时,需要确保电路的Type-C插座插头与设备的Type-C插头相互匹配,并且插拔稳固。 总之,通过适当的电路设计,可以将CH340串口与Type-C相连,实现串口USB的功能,从而使设备能够兼容Type-C接口,并通过串口进行数据传输。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值