串口

阅读 / 问答 / 标签

T口(miniUSB)能不能转换成串口?求plc大神指点啊,急!!

不能

cisco路由器配置问题串口18001841-思科

可以把端口重置一下router(config)#defaultinterfaces0/0/0如果还是不起作用只能说明那就是默认配置了就算是在那又不影响使用无所谓的需要的时候就把时钟改一下不就完了么DTE端配时钟是不起作用的区分DCE和DTE的方法可以用showcontroller这个命令看另外还有一种简单的方法从线缆来区分母头那端就是DCE端公头那端是DTE端晕没插线肯定是没有的嘛!插线以后showcontroller肯定能看到R4#showcontrollersserial1/0M4T:showcontroller:PASunit0,subunit0,f/wversion1-45,revID0x2800001,version1idb=0x622F7614,ds=0x622F86DC,ssb=0x622F8A98Clockmux=0x0,ucmd_ctrl=0x1C,port_status=0x7BSerialconfig=0x8,lineconfig=0x200maxdgram=1608,bufpool=78Kb,120particlesDCD=upDSR=upDTR=upRTS=upCTS=uplinestate:upcabletype:V.11(X.21)DCEcable,receivedclockrate2015232base0registers=0x3C800000,base1registers=0x3C802000mxt_ds=0x62638A24,rxringentries=78,txringentries=128rxring=0x3E18760,rxrshadow=0x622FF0F4,rx_head=0txring=0x3E18A20,txrshadow=0x622FF4D0,tx_head=8,tx_tail=8,tx_count=0throttled=0,enabled=0halted=0,lasthaltreason=0Microcodefatalerrors=0rx_no_eop_err=0,rx_no_stp_err=0,rx_no_eop_stp_err=0rx_no_buf=0,rx_soft_overrun_err=0,dump_err=0,bogus=0,mxt_flags=0x0tx_underrun_err=0,tx_soft_underrun_err=0,tx_limited=0(2)tx_fullring=0,tx_started=16,mxt_flush_count=0rx_int_count=0,tx_int_count=20

如何在Zstack 中使用串口

网上和论坛里面很多帖子都把精力集中到分析协议栈的串口工作机制上,比如分析DMA工作原理,中断工作原理,然后分析输入和输出Buffer的处理等内容,学习者跟着协议栈的串口底层一直到顶层转圈、转圈、再转圈,蒙圈了。实际上,从应用角度讲,我们根本就没有必要去深入的追究Zstack中串口的工作机制,也没有必要去搞清楚到底是怎么DMA和Interrupt的,我们只要调用几个简单函数就可以正常使用串口了。其实协议栈已经把使用串口的条件准备好了,我们何必再纠结硬件底层实现呢?应用者应该把协议栈看作一个平台,平台之上的应用才是我们的目标。下面我就讲一下如何利用协议栈现有平台来实现自己的串口应用。这里我所提及的现有平台即是Zstack自带的MT包,其实Zstack中的这个MT包功能相当强大,通过TI提供的ZTOOL工具可以用串口的方式同整个协议栈进行交互,在我们编写Zigbee应用程序的过程中,很多不知道该如何调用的函数都能在MT中找到参考!这个不多说了,有兴趣的同学可以去专门研究一下MT包。二、使用方法在MT包中,已经有了串口初始化即串口数据处理函数可用,关键的几个函数出现在MT_Uart.c文件中。我们拿出来几个关键函数说明一下(我捡重要语句注释):第一个函数void MT_UartInit (){ // 这个是MT中的一个串口初始化函数,主要作用是初始化串口工作的一些规矩halUARTCfg_t uartConfig;App_TaskID = 0; //处理串口数据的任务ID,可以先不管uartConfig.configured = TRUE;uartConfig.baudRate = MT_UART_DEFAULT_BAUDRATE;//默认38400波特率;可以更改,但是可能有新问题,具体解释内容比较多,我不说;uartConfig.flowControl = FALSE;//MT_UART_DEFAULT_OVERFLOW;//禁止硬件流控,如果你的串口只有RXD,TXD和GND三条线,必须这么做;uartConfig.flowControlThreshold= MT_UART_DEFAULT_THRESHOLD;uartConfig.rx.maxBufSize = MT_UART_DEFAULT_MAX_RX_BUFF;uartConfig.tx.maxBufSize = MT_UART_DEFAULT_MAX_TX_BUFF;uartConfig.idleTimeout = MT_UART_DEFAULT_IDLE_TIMEOUT;uartConfig.intEnable = TRUE;#if defined (ZTOOL_P1) || defined (ZTOOL_P2)uartConfig.callBackFunc = MT_UartProcessZToolData;//如果编译的时候选择使用ZTOOL,那么MT_UartProcessZtoolData将会处理串口接到的数//据串#elif defined (ZAPP_P1) || defined (ZAPP_P2)uartConfig.callBackFunc = MT_UartProcessZAppData;//如果编译的时候没有选择ZTOOL,而是选择使用了ZAPP,则由MT_UartProcessZAppData//函数来处理串口数据串(*如果是用CC2530的P0口那两根串口引脚,你就要define ZTOOL_P1,如果是P1口的那两根串口引脚,你就要define ZTOOL_P2,对于ZAPP_P1和ZAPP_P2也是一个情况*)#elseuartConfig.callBackFunc = NULL;//这个地方,如果你有兴趣自己写一个串口处理函数,那么你实现一个My_UartProcessData//函数,然后填到这里,替换NULL。#endif#if defined (MT_UART_DEFAULT_PORT)HalUARTOpen (MT_UART_DEFAULT_PORT, &uartConfig);//如果定义了默认串口,(0或者1),打开串口,这个HalUartOpen函数会做一大堆工作,具//体说来就是初始化呗。。。,我没有必要展开。需要注意的是这个函数把前面哪一堆初始化//的uartConfig做为参数传进去了噢!#else(void)uartConfig;#endif#if defined (ZAPP_P1) || defined (ZAPP_P2)MT_UartMaxZAppBufLen = 1;MT_UartZAppRxStatus = MT_UART_ZAPP_RX_READY;//这两句,如果是不想使用MT_UartProcessZToolData来处理串口数据,就。。。。//再说就要深入串口机制了,网上讲解文章太多了,自己看吧,我一会儿使用//MT_UartProcessZToolData。#endif}第二个函数void MT_UartRegisterTaskID( byte taskID ){App_TaskID = taskID;}第三个函数void MT_UartProcessZToolData ( uint8 port, uint8 event )osal_msg_deallocate ( (uint8 *)pMsg );}我们往上看看这个Message是什么?MT_UartProcessZToolData函数开始不远的地方有以下程序段:if (pMsg){pMsg->hdr.event = CMD_SERIAL_MSG;pMsg->msg = (uint8*)(pMsg+1);pMsg->msg[MT_RPC_POS_LEN] = LEN_Token;state = CMD_STATE1;}从这里看到,这个函数建立了一个消息头,用CMD_SERIAL_MSG做为消息,那么osal_msg_send给任务的那个消息将会以CMD_SERIAL_MSG出现。。。。。。。好了,以上三个函数看完,我们试着使用一下:以GenericApp例子为例:void GenericApp_Init( byte task_id ){XXXXXXXXXXXXXXXXXXXXXXXXXX(这个函数的最后,其实放在这个函数的哪里都行)MT_UartInit(); //added by kennanMT_UartRegisterTaskID(GenericApp_TaskID);}再看一下MT_UartRegisterTaskID(GenericApp_TaskID):void MT_UartRegisterTaskID( byte taskID ){App_TaskID = taskID;}好了,这样,我们顺利地把串口发来的数据用MT_UartProcessZToolData来处理,并且把处理后的数据打包发给了任务GenericApp_TaskID。接下来,我们看一下在GenericApp_TaskID中如何处理吧。在GenericApp的主处理函数中:UINT16 GenericApp_ProcessEvent( byte task_id, UINT16 events ){if ( events & SYS_EVENT_MSG ){MSGpkt = (afIncomingMSGPacket_t*)osal_msg_receive( GenericApp_TaskID );while ( MSGpkt ){switch ( MSGpkt->hdr.event ){case ZDO_CB_MSG:GenericApp_ProcessZDOMsgs( (zdoIncomingMsg_t *)MSGpkt );break;case KEY_CHANGE:GenericApp_HandleKeys( ((keyChange_t *)MSGpkt)->state, ((keyChange_t*)MSGpkt)->keys );break;//增加Case CMD_SERIAL_MSG:ProcessUartData((mtOSALSerialData_t *)MSGpkt); //这个函数你自己实现吧,想做啥呢?想做啥就做啥。如果想把接//到的数据发回串口,调用HalUARTWrite就行了。}如果你不知道如何提取串口消息并处理,我就好人做到底,帮你实现一个ProcessUartData()函数吧。这个函数的作用是把接收到的数据从CM0开始一直到payload的最后一个字节发送给串口回显,不包括校验字节噢。ProcessUartCommand((mtOSALSerialData_t *)MSGpkt){ //为了正确地进行下面工作,用mtOSALSerialData_t类型来指向整个zigbee数据包(不是串//口数据包)uint8 *pMsg;pMsg = MSGpkt->msg;//定义一个指针,指向真正的串口接收数据存放位置,MSGptk里面还有一些别的Header噢。switch ( MSGpkt->hdr.event ){case CMD_SERIAL_MSG://如果是串口消息。。。。HalLedSet( HAL_LED_RED, HAL_LED_MODE_FLASH );//用LED灯指示一下收到数据啦uint8 *pBuffer;uint8 datalength;uint8 i;//定义几个变量,为从接收到的串口包里面提取数据以及写回串口做准备datalength = *pMsg++;//串口包中第一个字节是数据长度噢pBuffer = osal_mem_alloc(datalength);//分配一块内存准备把串口消息数据拿出来if(pBuffer != NULL){for(i = 0;i < datalength; i++)*pBuffer++ = *pMsg++;//把消息中的串口数据按照datalength数量挨个捞出来放血(放血啥意思?把池子//里面那东西捞出来放血,明白不?HalUARTWrite(0,pBuffer,datalength);//捞出来放血的串口数据再写回串口,也就是送到串口助手显示Osal_memfree(pBuffer);//动态申请的内存记得用完了free一下噢}break;default:break;}}说明:因为ZTOOL发过来的数据是有格式的,所以如果你用串口助手来测试,那么发的数据要按照格式来,如果你不想按那个格式,你可以自己去修改MT_UartProcessZToolData里面的相关程序。这种方法对于想要通过PC来控制zigbee的应用场合非常实用,因为你PC发过来的一般也会有命令和数据,如果不用MT的格式,你自己也要规范一个格式,既然MT已经有了,我们就借用就好。对于MT_UartProcessZAppData这个处理方法,也就是你define了ZAPP_P1或ZAPP_P2的情况,其机制也是类似的,只不过没有规定格式,你更自由,这里我就不多说了。再有,如果你真的在测试的时候不知道那么一长串数据的xor 结果是多少,也可以去MT_UartProcessZToolData函数中,找到://if ((MT_UartCalcFCS ((uint8*)&pMsg->msg[0], MT_RPC_FRAME_HDR_SZ +LEN_Token) == FSC_Token)){osal_msg_send( App_TaskID, (byte *)pMsg );}else//{//osal_msg_deallocate ( (uint8 *)pMsg );//}把我标红的几个位置注释掉,就不会校验了,你也不用算xor结果了,不过发数据的时候这个位置还是要的,你随便填个0好了。

keil4串口驱动PL2303 V1.5.0安装之后,没有找到COM口,更新驱动程序也不行。请问要怎么解决?

什么系统?网络畅通,用驱动大师试一试要用 com接口,还是推荐带串口的机器

在线求教 关于串口通讯 oncomm事件

sle_1.text 被赋值 空值 了,应该是不是 应该 用 sle_1.text =sle_1.text + 变量 这个 方式?PB 里 字符串 连接 操作 是用 什么 方式?

如何CommMonitor软件监视串口数据

  方法/步骤  1  打开CommMonitor软件  2  选择要监视的软件进程ID  3  选择串口号  4  选择显示格式  5  启动监视

VC 编写串口程序 用MSCOMM组件,我的串口是PCI口扩展出来的,执行程序会报错误,不能设置COMM状态。

IsWindowVisible

如何在一个单独线程中调用 CMSComm串口通信

串口API通信函数编程16位串口应用程序中,使用的16位的Windows API通信函数:①OpenComm()打开串口资源,并指定输入、输出缓冲区的大小(以字节计)CloseComm() 关闭串口;例:int idComDev;idComDev = OpenComm("COM1", 1024, 128);CloseComm(idComDev);②BuildCommDCB() 、setCommState()填写设备控制块DCB,然后对已打开的串口进行参数配置; 例:DCB dcb;BuildCommDCB("COM1:2400,n,8,1", &dcb);SetCommState(&dcb);③ ReadComm 、WriteComm()对串口进行读写操作,即数据的接收和发送.例:char *m_pRecieve; int count;ReadComm(idComDev,m_pRecieve,count);Char wr[30]; int count2;WriteComm(idComDev,wr,count2);16位下的串口通信程序最大的特点就在于:串口等外部设备的操作有自己特有的API函数;而32位程序则把串口操作(以及并口等)和文件操作统一起来了,使用类似的操作。在MFC下的32位串口应用程序32位下串口通信程序可以用两种方法实现:利用ActiveX控件;使用API 通信函数。使用ActiveX控件,程序实现非常简单,结构清晰,缺点是欠灵活;使用API 通信函数的优缺点则基本上相反。使用ActiveX控件:VC++ 6.0提供的MSComm控件通过串行端口发送和接收数据,为应用程序提供串行通信功能。使用非常方便,但可惜的是,很少有介绍MSComm控件的资料。⑴.在当前的Workspace中插入MSComm控件。Project菜单------>Add to Project---->Components and Controls----->RegisteredActiveX Controls--->选择Components: Microsoft Communications Control,version 6.0 插入到当前的Workspace中。结果添加了类CMSComm(及相应文件:mscomm.h和mscomm.cpp )。⑵.在MainFrm.h中加入MSComm控件。protected:CMSComm m_ComPort;在Mainfrm.cpp::OnCreare()中:DWORD style=WS_VISIBLE|WS_CHILD;if (!m_ComPort.Create(NULL,style,CRect(0,0,0,0),this,ID_COMMCTRL)){TRACE0("Failed to create OLE Communications Control ");return -1; // fail to create}⑶.初始化串口m_ComPort.SetCommPort(1); //选择COM?m_ComPort. SetInBufferSize(1024); //设置输入缓冲区的大小,Bytesm_ComPort. SetOutBufferSize(512); //设置输入缓冲区的大小,Bytes//if(!m_ComPort.GetPortOpen()) //打开串口m_ComPort.SetPortOpen(TRUE);m_ComPort.SetInputMode(1); //设置输入方式为二进制方式m_ComPort.SetSettings("9600,n,8,1"); //设置波特率等参数m_ComPort.SetRThreshold(1); //为1表示有一个字符引发一个事件m_ComPort.SetInputLen(0);⑷.捕捉串口事项。MSComm控件可以采用轮询或事件驱动的方法从端口获取数据。我们介绍比较使用的事件驱动方法:有事件(如接收到数据)时通知程序。在程序中需要捕获并处理这些通讯事件。在MainFrm.h中:protected:afx_msg void OnCommMscomm();DECLARE_EVENTSINK_MAP()在MainFrm.cpp中:BEGIN_EVENTSINK_MAP(CMainFrame,CFrameWnd )ON_EVENT(CMainFrame,ID_COMMCTRL,1,OnCommMscomm,VTS_NONE) //映射ActiveX控件事件END_EVENTSINK_MAP()⑸.串口读写. 完成读写的函数的确很简单,GetInput()和SetOutput()就可。两个函数的原型是:VARIANT GetInput();及 void SetOutput(const VARIANT& newValue);都要使用VARIANT类型(所有Idispatch::Invoke的参数和返回值在内部都是作为VARIANT对象处理的)。无论是在PC机读取上传数据时还是在PC机发送下行命令时,我们都习惯于使用字符串的形式(也可以说是数组形式)。查阅VARIANT文档知道,可以用BSTR表示字符串,但遗憾的是所有的BSTR都是包含宽字符,即使我们没有定义_UNICODE_UNICODE也是这样! WinNT支持宽字符, 而Win95并不支持。为解决上述问题,我们在实际工作中使用CbyteArray,给出相应的部分程序如下:void CMainFrame::OnCommMscomm(){VARIANT vResponse; int k;if(m_commCtrl.GetCommEvent()==2) {k=m_commCtrl.GetInBufferCount(); //接收到的字符数目if(k>0) {vResponse=m_commCtrl.GetInput(); //readSaveData(k,(unsigned char*) vResponse.parray->pvData);} // 接收到字符,MSComm控件发送事件 }。。。。。 // 处理其他MSComm控件}void CMainFrame::OnCommSend() {。。。。。。。。 // 准备需要发送的命令,放在TxData[]中CByteArray array;array.RemoveAll();array.SetSize(Count);for(i=0;i<Count;i++)array.SetAt(i, TxData[i]);m_ComPort.SetOutput(COleVariant(array)); // 发送数据 }二 使用32位的API 通信函数:⑴.在中MainFrm.cpp定义全局变量HANDLE hCom; // 准备打开的串口的句柄HANDLE hCommWatchThread ;//辅助线程的全局函数⑵.打开串口,设置串口hCom =CreateFile( "COM2", GENERIC_READ | GENERIC_WRITE, // 允许读写0, // 此项必须为0NULL, // no security attrsOPEN_EXISTING, //设置产生方式FILE_FLAG_OVERLAPPED, // 我们准备使用异步通信NULL );我使用了FILE_FLAG_OVERLAPPED结构。这正是使用API实现非阻塞通信的关键所在。ASSERT(hCom!=INVALID_HANDLE_VALUE); //检测打开串口操作是否成功SetCommMask(hCom, EV_RXCHAR|EV_TXEMPTY );//设置事件驱动的类型SetupComm( hCom, 1024,512) ; //设置输入、输出缓冲区的大小PurgeComm( hCom, PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR| PURGE_RXCLEAR ); //清干净输入、输出缓冲区COMMTIMEOUTS CommTimeOuts ; //定义超时结构,并填写该结构…………SetCommTimeouts( hCom, &CommTimeOuts ) ;//设置读写操作所允许的超时DCB dcb ; // 定义数据控制块结构GetCommState(hCom, &dcb ) ; //读串口原来的参数设置dcb.BaudRate =9600; dcb.ByteSize =8; dcb.Parity = NOPARITY;dcb.StopBits = ONESTOPBIT ;dcb.fBinary = TRUE ;dcb.fParity = FALSE;SetCommState(hCom, &dcb ) ; //串口参数配置上述的COMMTIMEOUTS结构和DCB都很重要,实际工作中需要仔细选择参数。⑶启动一个辅助线程,用于串口事件的处理。Windows提供了两种线程,辅助线程和用户界面线程。辅助线程没有窗口,所以它没有自己的消息循环。但是辅助线程很容易编程,通常也很有用。在次,我们使用辅助线程。主要用它来监视串口状态,看有无数据到达、通信有无错误;而主线程则可专心进行数据处理、提供友好的用户界面等重要的工作。hCommWatchThread=CreateThread( (LPSECURITY_ATTRIBUTES) NULL, //安全属性0,//初始化线程栈的大小,缺省为与主线程大小相同(LPTHREAD_START_ROUTINE)CommWatchProc, //线程的全局函数GetSafeHwnd(), //此处传入了主框架的句柄0, &dwThreadID );ASSERT(hCommWatchThread!=NULL);⑷为辅助线程写一个全局函数,主要完成数据接收的工作。请注意OVERLAPPED结构的使用,以及怎样实现了非阻塞通信。UINT CommWatchProc(HWND hSendWnd){DWORD dwEvtMask=0 ;SetCommMask( hCom, EV_RXCHAR|EV_TXEMPTY );//有哪些串口事件需要监视?WaitCommEvent( hCom, &dwEvtMask, os );// 等待串口通信事件的发生检测返回的dwEvtMask,知道发生了什么串口事件:if ((dwEvtMask & EV_RXCHAR) == EV_RXCHAR){ // 缓冲区中有数据到达COMSTAT ComStat ; DWORD dwLength;ClearCommError(hCom, &dwErrorFlags, &ComStat ) ;dwLength = ComStat.cbInQue ; //输入缓冲区有多少数据?if (dwLength > 0) { BOOL fReadStat ;fReadStat = ReadFile( hCom, lpBuffer,dwLength, &dwBytesRead,&READ_OS( npTTYInfo ) ); //读数据注:我们在CreareFile()时使用了FILE_FLAG_OVERLAPPED,现在ReadFile()也必须使用LPOVERLAPPED结构.否则,函数会不正确地报告读操作已完成了.使用LPOVERLAPPED结构, ReadFile()立即返回,不必等待读操作完成,实现非阻塞通信.此时, ReadFile()返回FALSE, GetLastError()返回ERROR_IO_PENDING.if (!fReadStat){if (GetLastError() == ERROR_IO_PENDING){while(!GetOverlappedResult(hCom,&READ_OS( npTTYInfo ), & dwBytesRead, TRUE )){dwError = GetLastError();if(dwError == ERROR_IO_INCOMPLETE) continue;//缓冲区数据没有读完,继续…… ……::PostMessage((HWND)hSendWnd,WM_NOTIFYPROCESS,0,0);//通知主线程,串口收到数据}所谓的非阻塞通信,也即异步通信。是指在进行需要花费大量时间的数据读写操作(不仅仅是指串行通信操作)时,一旦调用ReadFile()、WriteFile(), 就能立即返回,而让实际的读写操作在后台运行;相反,如使用阻塞通信,则必须在读或写操作全部完成后才能返回。由于操作可能需要任意长的时间才能完成,于是问题就出现了。非常阻塞操作还允许读、写操作能同时进行(即重叠操作?),在实际工作中非常有用。要使用非阻塞通信,首先在CreateFile()时必须使用FILE_FLAG_OVERLAPPED;然后在 ReadFile()时lpOverlapped参数一定不能为NULL,接着检查函数调用的返回值,调用GetLastError(),看是否返回ERROR_IO_PENDING。如是,最后调用GetOverlappedResult()返回重叠操作(overlapped operation)的结果;WriteFile()的使用类似。⑸.在主线程中发送下行命令。BOOL fWriteStat ; char szBuffer[count];…………//准备好发送的数据,放在szBuffer[]中fWriteStat = WriteFile(hCom, szBuffer, dwBytesToWrite,&dwBytesWritten, &WRITE_OS( npTTYInfo ) ); //写数据//我在CreareFile()时使用了FILE_FLAG_OVERLAPPED,现在WriteFile()也必须使用LPOVERLAPPED结构.否则,函数会不正确地报告写操作已完成了.使用LPOVERLAPPED结构,WriteFile()立即返回,不必等待写操作完成,实现非阻塞 通信.此时, WriteFile()返回FALSE, GetLastError()返回ERROR_IO_PENDING.int err=GetLastError();if (!fWriteStat) {if(GetLastError() == ERROR_IO_PENDING){while(!GetOverlappedResult(hCom, &WRITE_OS( npTTYInfo ),&dwBytesWritten, TRUE )) {dwError = GetLastError();if(dwError == ERROR_IO_INCOMPLETE){// normal result if not finisheddwBytesSent += dwBytesWritten; continue; }......................//我使用了多线程技术,在辅助线程中监视串口,有数据到达时依靠事件驱动,读入数据并向主线程报告(发送数据在主线程中,相对说来,下行命令的数据总是少得多);并且,WaitCommEvent()、ReadFile()、WriteFile()都使用了非阻塞通信技术,依靠重叠(overlapped)读写操作,让串口读写操作在后台运行。

C#串口通信中COM口的缓存为4096,假设1个2MB的数据通过此COM口,怎么样实现全部读取,而没有遗漏或错误?

在程序中创建缓冲区,串口只管接收,接收后保存在缓冲区中,操作缓冲区的数据就行了。

java 串口开发包comm.jar在java官网哪个页面可以下载?我要官方的下载页面

建议到maven中央仓库下载,然后用maven依赖一下,就会自动下载下来了。以下为maven的依赖:<dependency> <groupId>javax.comm</groupId> <artifactId>comm</artifactId> <version>3.0-u1</version></dependency>

vc串口CMSComm 类的应用

不会!!

串口硬盘与并口硬盘的区别在哪?

串口的传输要快好多.其他几乎可以忽略

SCSI接口是并口传输还是串口传输?

  SCSI接口串口硬盘出现之前一种传输速率较快的接口。称为:小型计算机系统接口(Small Computer System Interface; 简写:SCSI),一种用于计算机和智能设备之间(硬盘、软驱、光驱、打印机、扫描仪等)系统级接口的独立处理器标准,因此它既不是并口也不是串口,而是一种较为特殊的接口总线,具有与多种类型的外设进行通信的能力,它配合SCSI接口10000rpm和15000rpm的硬盘, 最快传输速度可达160Mps和320Mps,这在十多年前只有并口硬盘40Mps的时代是“飞快”了,主要应用在工作站、小型机等要求较高的设备上,是当时高速数据传输的一种技术。  普通的台式机等在串口硬盘问世之后,串口硬盘150Mps的传输速率已经接近中高端的SCSI接口技术,如果再配合硬盘阵列技术,可以轻松达到和超过SCSI的硬盘,用户只要用买一个高速硬盘的钱就足够做一个磁盘阵列了,而容量和可靠性(7200rpm的硬盘工作相对更稳定一些)都有大幅度的提升,因此近十年来,一些配置较高的工作站等都不再采用SCSI的接口技术;近五年来,传输速度更高固态硬盘的迅速发展和降价,更是加快了它退出市场的步伐。

什么是串口,并口和SCSI,能做一下详细介绍吗?

串行通信接口 就是 串口相对的,并行通信接口 就是 并口SCSI 小型计算机系统接口(英语:Small Computer System Interface; 简写:SCSI),一种用于计算机和智能设备之间(硬盘、软驱、光驱、打印机、扫描仪等)系统级接口的独立处理器标准。 SCSI是一种智能的通用接口标准。它是各种计算机与外部设备之间的接口标准。百度百科 里有的
 首页 上一页  1 2 3 4