引言
  串行接å£è¨å‚™æ†‘å€Ÿå…¶æŽ§åˆ¶éˆæ´»ã€æŽ¥å£ç°¡å–®ã€å 用系統資æºå°‘ç‰å„ªé»žï¼Œè¢«å»£æ³›æ‡‰ç”¨äºŽå·¥æ¥æŽ§åˆ¶ã€å®¶åºå®‰é˜²ã€GPS衛星定ä½å°Žèˆªä»¥åŠæ°´ã€é›»ã€æ°£è¡¨çš„æŠ„表ç‰é ˜åŸŸã€‚在這些嵌入å¼ç³»çµ±ä¸ï¼Œå¯èƒ½æœƒæœ‰å¾ˆå¤šå¾žè¨å‚™éƒ½é€šéŽä¸²è¡ŒæŽ¥å£èˆ‡ä¸»æ©Ÿé€²è¡Œé€šä¿¡ï¼Œå¦‚GPRS MODEMã€ç´…外發é€å’ŒæŽ¥æ”¶æ¨¡å¡Šã€RS485總線接å£ç‰ã€‚這使得開發人員常常é¢è‡¨åµŒå…¥å¼ç³»çµ±ä¸ä¸»æ©Ÿä¸²è¡Œé€šä¿¡æŽ¥å£ä¸è¶³çš„å•題,é‡å°æ¤å•題,本文介紹了幾種常見的解決方法。
軟件模擬法
ã€€ã€€è»Ÿä»¶æ¨¡æ“¬æ³•å¯æ ¹æ“šä¸²è¡Œé€šè¨Šçš„傳逿 ¼å¼ï¼Œåˆ©ç”¨å®šæ™‚器和主機的I/Oå£ä¾†æ¨¡æ“¬ä¸²è¡Œé€šè¨Šçš„æ™‚åºï¼Œä»¥é”到擴展串å£çš„目的。
  接收éŽç¨‹ä¸éœ€è¦æª¢æ¸¬èµ·å§‹ä½ï¼Œé€™å¯ä»¥ä½¿ç”¨æŸ¥è©¢æ–¹å¼ï¼Œæˆ–者,在端å£å…·æœ‰ä¸æ–·åŠŸèƒ½çš„ä¸»æ©Ÿä¸ä¹Ÿå¯ä»¥ä½¿ç”¨ç«¯å£çš„䏿–·é€²è¡Œè™•ç†ã€‚接收和發é€éŽç¨‹ä¸ï¼Œå°å®šæ™‚çš„è™•ç†æ—¢å¯ä»¥ä½¿ç”¨æŸ¥è©¢æ–¹å¼ä¹Ÿå¯ä»¥ä½¿ç”¨å®šæ™‚噍䏿–·æ–¹å¼ã€‚ç‚ºäº†ç¢ºä¿æ•¸æ“šçš„æ£ç¢ºæ€§ï¼Œåœ¨æŽ¥æ”¶éŽç¨‹ä¸å¯ä»¥åœ¨æª¢æ¸¬ç•°æ¥å‚³è¼¸çš„èµ·å§‹ä¿¡è™Ÿè™•åŠ ä¸Šä¸€äº›é˜²å¹²æ“¾è™•ç†ï¼Œåœ¨æŽ¥æ”¶æ¯å€‹ä½æ™‚å¯ä»¥é‡‡ç”¨å¤šæ¬¡é‡‡æ¨£ã€‚
利用并å£è½‰ä¸²å£æ“´å±•串行å£
  基于Intel8251çš„ä¸²è¡Œå£æ“´å±•
  Intel8251æ˜¯ä¸€ç¨®é€šç”¨çš„åŒæ¥/ç•°æ¥ç™¼é€å™¨ï¼ˆUSART),它的工作方å¼å¯ä»¥é€šéŽç·¨ç¨‹è¨ç½®ï¼Œå¹¶å…·æœ‰ç¨ç«‹çš„æŽ¥æ”¶/發é€å™¨ã€‚èƒ½ä»¥åŒæ¥æˆ–ç•°æ¥ä¸²è¡Œé€šä¿¡æ–¹å¼å·¥ä½œï¼Œè‡ªå‹•完æˆå¹€æ ¼å¼ï¼Œå…·æœ‰å¥‡ã€å¶æ ¡é©—和錯誤檢測電路。
  基于TL16C554çš„ä¸²è¡Œå£æ“´å±•
  TL16C554是TIå…¬å¸ç”Ÿç”¢çš„4通é“ç•°æ¥æ”¶ç™¼å™¨é›†æˆèŠ¯ç‰‡ã€‚å°TL16C554串行通é“的控制,是通éŽå°æŽ§åˆ¶å¯„å˜å™¨LCRã€IERã€DLLã€DLMã€MCRå’ŒFCR編程來實ç¾çš„ã€‚é€™äº›æŽ§åˆ¶å—æ±ºå®šå—符長度ã€åœæ¢ä½çš„個數ã€å¥‡å¶æ ¡é©—ã€æ³¢ç‰¹çއ以åŠèª¿åˆ¶è§£èª¿å™¨æŽ¥å£ã€‚控制寄å˜å™¨å¯ä»¥ä»»æ„é †åºå¯«å…¥ï¼Œä½†æ˜¯IERå¿…é ˆæœ€åŽä¸€å€‹å¯«å…¥ï¼Œå› ç‚ºå®ƒæŽ§åˆ¶ä¸æ–·ä½¿èƒ½ã€‚串行通é“內的波特率發生器(BRG)å…許時é˜é™¤ä»¥1至65535ä¹‹é–“çš„ä»»æ„æ•¸ï¼ŒBRGæ ¹æ“šå…¶ä¸åŒçš„ä¸‰ç¨®é€šç”¨é »çŽ‡ä¸çš„一種來決定標準波特率。
16C55x系列芯片還包括16C550ã€16C552,分別å¯ä»¥æ“´å±•1個和2個串行å£ã€‚
åˆ©ç”¨ä¸²è¡Œå£æ“´å±•串行å£
  基于GM8123/25ç³»åˆ—èŠ¯ç‰‡çš„ä¸²è¡Œå£æ“´å±•
  GM8123/25ç³»åˆ—ä¸²å£æ“´å±•芯片å¯ä»¥å…¨ç¡¬ä»¶å¯¦ç¾ä¸²å£æ“´å±•ï¼Œé€šè¨Šæ ¼å¼å¯è¨ç½®ï¼Œå¹¶èˆ‡æ¨™æº–串å£é€šè¨Šæ ¼å¼å…¼å®¹ã€‚
  GM8125坿“´å±•5個標準串å£ï¼Œé€šéŽå¤–éƒ¨å¼•è…³é¸æ“‡ä¸²å£æ“´å±•模å¼ï¼šå–®é€šé“工作模å¼å’Œå¤šé€šé“工作模å¼ã€‚å–®é€šé“æ¨¡å¼ä¸‹ï¼Œç„¡éœ€è¨ç½®èŠ¯ç‰‡çš„é€šè¨Šæ ¼å¼ï¼Œå串å£å’Œæ¯ä¸²å£ä»¥ç›¸åŒçš„æ³¢ç‰¹çŽ‡å·¥ä½œï¼ŒåŒä¸€æ™‚刻åªå…許一組å串å£å’Œæ¯ä¸²å£é€šè¨Šï¼Œå·¥ä½œå串å£ç”±åœ°å€ç·šé¸æ“‡ã€‚單通é“工作模å¼é©ç”¨äºŽæ‰€æœ‰å¾žæ©Ÿä¸éœ€è¦åŒæ™‚通訊,并且通訊éŽç¨‹å®Œå…¨ç”±ä¸»æ©ŸæŽ§åˆ¶çš„ç³»çµ±ã€‚å¤šé€šé“æ¨¡å¼ä¸‹ï¼Œå„å䏲壿³¢ç‰¹çŽ‡ç›¸åŒï¼Œå…許所有å串å£åŒæ™‚與æ¯ä¸²å£é€šè¨Šï¼Œæ¯ä¸²å£ä»¥å䏲壿³¢ç‰¹çŽ‡çš„6å€å·¥ä½œã€‚ç™¼é€æ™‚由地å€ç·šé¸æ“‡ç”¨ä¾†ç™¼é€æ•¸æ“šçš„å串å£ï¼›æŽ¥æ”¶æ™‚å串å£èƒ½ä¸»å‹•響應從機發é€çš„æ•¸æ“šï¼Œå†ç”±æ¯ä¸²å£ç™¼é€çµ¦ä¸»æ©Ÿï¼ŒåŒæ™‚由地å€ç·šè¿”回接收到數據的å串å£åœ°å€ï¼Œä¸»æ©Ÿåœ¨æŽ¥æ”¶åˆ°å串å£é€ä¾†çš„æ•¸æ“šåŽï¼Œå¯ä»¥æ ¹æ“šåœ°å€ç·šçš„狀態判斷數據是由哪一個從機發é€çš„。
多通é“工作模å¼ä¸‹ï¼Œåœ¨é€²è¡Œæ•¸æ“šé€šè¨Šå‰è¦å°èŠ¯ç‰‡é€²è¡Œå·¥ä½œæ–¹å¼è¨ç½®ï¼ŒåŒ…括串å£å¹€æ ¼å¼è¨ç½®å’Œé€šè¨Šæ³¢ç‰¹çއè¨ç½®ã€‚
  通éŽä¸²è¡Œå£å’ŒæŽ§åˆ¶å¼•腳相互é…åˆå¯å°èŠ¯ç‰‡é€²è¡Œå·¥ä½œæ–¹å¼è¨ç½®ï¼Œå¼•è…³MS為0ã€ä¸”STADD2~STADD0為000時寫命令å—,引腳MS為1ã€STADD2~STADD0為000時讀命令å—。進行工作方å¼è¨ç½®æ™‚ï¼ŒèŠ¯ç‰‡çš„å¹€æ ¼å¼å’Œæ¯ä¸²å£å·¥ä½œæ³¢ç‰¹çŽ‡èˆ‡ä¸Šä¸€æ¬¡é€²è¡Œæ•¸æ“šé€šè¨Šæ™‚ä¸€è‡´ï¼›è€Œå¾©ä½åŽçš„å¹€æ ¼å¼ç‚º11bit,æ¯ä¸²å£æ³¢ç‰¹çŽ‡ç‚º7200bps。
  基于SP2338çš„ä¸²è¡Œå£æ“´å±•
  SP2338是采用低功耗CMOS å·¥è—è¨è¨ˆçš„通用異æ¥ä¸²è¡Œå£æ“´å±•芯片,它å¯è¼•æ¾å°‡ä¸»æ©ŸåŽŸæœ‰çš„1å€‹ä¸²è¡Œå£æ“´å±•æˆ3 個全新的全雙工串行å£ã€‚
  SP2338é©ç”¨äºŽ1個起始ä½ã€8個數據ä½ã€1å€‹åœæ¢ä½çš„多串å£ç³»çµ±ï¼Œä¹Ÿå°±æ˜¯èªªå…¶å¹€æ ¼å¼æ˜¯ä¸å¯ç·¨ç¨‹çš„ã€‚ä¸»æ©Ÿé€šéŽæ”¹è®ŠADRI1ã€ADRI0地å€ç·šç‹€æ…‹çš„æ–¹å¼é¸æ“‡3個å串å£ä¸çš„ä»»æ„一個,3個å串å£çš„地å€åˆ†åˆ¥ç‚º00ã€01ã€10。地å€11用于執行SP2338 èŠ¯ç‰‡æœ¬èº«çš„å¾©ä½æŒ‡ä»¤0x35 或0xB5ã€ç¡çœ 指令0x55或0xD5ã€å»¶æ™‚指令0x00。å‘RX0~RX3ä¸çš„ä»»æ„一個接收端å£å¯«ä»»æ„數據å³å¯å°‡SP2338喚醒,但由于SP2338的喚醒時間需è¦25mså·¦å³ï¼Œæ•…ç”¨äºŽèŠ¯ç‰‡å–šé†’çš„æ•¸æ“šå°‡ä¸æœƒè¢«ä¸»æ©ŸæŽ¥æ”¶ã€‚å› æ¤ï¼Œå¯ä»¥å…ˆç™¼é€ä¸€å€‹å—節數據用于喚醒芯片,延時25msåŽå³å¯é€²è¡Œæ£å¸¸çš„æ•¸æ“šå‚³è¼¸ã€‚
  未使用的輸入端å£ï¼Œå¦‚RX0ã€RX1ã€RX2ç‰å¿…é ˆé€£æŽ¥åˆ°VCC;未使用的輸出端å£ï¼Œå¦‚TX0ã€TX1ã€TX2ç‰å¿…é ˆæ‡¸ç©ºï¼›æœªä½¿ç”¨çš„ADRI0ã€ADRI1å¿…é ˆé€£æŽ¥åˆ°GND。
  主機收發數據時åºç‚ºï¼šä¸»æ©ŸTX3接收到一個å—ç¯€åŽæ‡‰ç«‹å³è®€å–SP2338的輸出地å€ADRO0ã€ADRO1的狀態,判斷接收到的數據來自哪個å串å£ï¼›ä¸»æ©Ÿç™¼é€æ•¸æ“šæ™‚ï¼Œé¦–å…ˆé€šéŽADRI0ã€ADRI1鏿“‡æŸä¸€å€‹å串å£ï¼Œå†å‘TX3寫將發é€çš„æ•¸æ“šã€‚
[align=center]

圖1 本文è¨è¨ˆçš„æ“´å±•ä¸²è¡Œå£æ–¹æ³•示æ„圖[/align]
本文è¨è¨ˆçš„æ“´å±•方法
  在電路è¨è¨ˆçš„éŽç¨‹ä¸ï¼Œæœ¬æ–‡è¨è¨ˆå‡ºä¸€ç¨®é©åˆè‡ªå·±ç³»çµ±éœ€è¦ã€å°‡1個䏲壿“´å±•為3個串å£çš„æ–¹æ¡ˆï¼Œå¦‚圖1所示。
  其ä¸ï¼Œ4001是四2輸入端或éžé–€ï¼Œ40106æ˜¯å…æ–½å¯†ç‰¹è§¸ç™¼å™¨ã€‚4001çš„4腳和9腳分別為主機的RXDå’ŒTXD,40106çš„2腳和9腳為å串å£çš„TXD0å’ŒRXD0,6腳和11腳為å串å£çš„TXD1å’ŒRXD1,4腳和13腳為å串å£çš„TXD2å’ŒRXD2。
ã€€ã€€æ ¹æ“šåœ–çš„é€£æŽ¥æ–¹å¼å’Œé‚輯代數的推導å¯å¾—:RXD的狀態ç‰äºŽ40106çš„9è…³ã€11è…³ã€13腳的狀態相與。當40106çš„9è…³ã€11è…³ã€13è…³ä¸çš„ä»»æ„一個有數據信號時,由于在異æ¥ä¸²è¡Œé€šè¨Šä¸ï¼Œç„¡æ•¸æ“šå‚³è¼¸æ™‚çš„å¼•è…³ç‹€æ…‹ç‚ºé«˜ï¼Œå› æ¤RXD上就能接收到有數據信號的那個引腳上的數據狀態。40106çš„2è…³ã€4è…³ã€6腳的狀態ç‰äºŽTXD的狀態,所以å¯ä»¥åˆ©ç”¨40106çš„2è…³ã€4è…³ã€6è…³åšç‚ºå串å£çš„TXD。
  這種è¨è¨ˆæ–¹æ¡ˆé©ç”¨äºŽä¸»æ©ŸåŒæ™‚å‘多個串行è¨å‚™ç™¼é€æ•¸æ“šï¼Œè€Œå¾žè¨å‚™ä¸åŒæ™‚å‘ä¸»æ©Ÿç™¼é€æ•¸æ“šçš„æƒ…æ³ã€‚å†å¢žåŠ å¹¾å€‹ä¿¡è™Ÿç·šï¼Œå°±å¯ä»¥å€åˆ†å‡ºå‘哪一個從è¨å‚™ç™¼é€æ•¸æ“šä»¥åŠæŽ¥æ”¶åˆ°çš„æ•¸æ“šæ˜¯ä¾†è‡ªå“ªä¸€å€‹å¾žè¨å‚™ã€‚在本文的系統ä¸ï¼Œä¸»æ©Ÿæ˜¯é€šä¿¡çš„發起者,接收到的數據來自哪個從è¨å‚™æ˜¯å¯ä»¥é çŸ¥çš„ï¼Œå› æ¤ï¼Œåªéœ€å†å¢žåŠ 3個控制從è¨å‚™ä½¿èƒ½çš„信號線å³å¯ã€‚
幾種方法的比較
ã€€ã€€åœ¨éœ€è¦æ“´å±•ç³»çµ±çš„ä¸²è¡Œå£æ™‚,使用多串行å£å–®ç‰‡æ©Ÿçš„æ–¹æ³•是最容易想到的。由于串å£é›†æˆåœ¨å–®ç‰‡æ©Ÿå…§éƒ¨ï¼Œå› æ¤è¨å‚™é«”ç©è¼ƒå°ï¼ŒæŠ—干擾能力較高,但多串å£å–®ç‰‡æ©Ÿé€šå¸¸åƒ¹æ ¼è¼ƒé«˜ï¼Œè€Œä¸”,如果是開發人員所ä¸ç†Ÿæ‚‰çš„型號,還需è¦é–‹ç™¼äººå“¡é‡æ–°å¸ç¿’并購買與之é…套的開發工具,這延長了產å“çš„é–‹ç™¼å‘¨æœŸï¼Œä¹Ÿå¢žåŠ äº†ç”¢å“çš„é–‹ç™¼æˆæœ¬ã€‚
  軟件模擬法å 用的系統資æºå°‘ã€æˆæœ¬ä½Žã€æ˜“于實ç¾ã€‚但其采樣次數較低,難以ä¿è‰æ•¸æ“šçš„æ£ç¢ºæ€§ï¼Œè€Œä¸”ä¸€èˆ¬ä¸èƒ½æ¨¡æ“¬éŽé«˜çš„æ³¢ç‰¹çŽ‡ã€‚
ã€€ã€€å¹¶è¡Œå£æ“´å±•䏲壿–¹æ³•的功能比較強大,能æä¾›MODEM控制信號ã€é€šè¨Šé€Ÿåº¦é«˜ï¼Œä½†æŽ§åˆ¶å¾©é›œï¼Œå 用MCU的端å£è³‡æºè¼ƒå¤šï¼ŒåŒæ™‚åƒ¹æ ¼ä¹Ÿè¼ƒé«˜ã€‚
ã€€ã€€åˆ©ç”¨ä¸²è¡Œå£æ“´å±•串行å£ï¼ŒæŽ§åˆ¶ç°¡å–®ï¼Œèƒ½æœ€å¤§é™åº¦åœ°æ¸›å°‘控制線,ä¸éœ€è¦å 用太多的主機系統資æºï¼Œè€Œä¸”通用性強,性能穩定,å¯ä¿è‰æ•¸æ“šçš„æ£ç¢ºæ€§ã€‚GM812xçš„ä¸è¶³ä¹‹è™•åœ¨äºŽï¼šä¸æ»¿è¶³è¶…ä½ŽåŠŸè€—æ‡‰ç”¨è¦æ±‚ï¼›å¤šé€šé“æ¨¡å¼ä¸‹ï¼Œæ‰€æœ‰å串å£å·¥ä½œæ³¢ç‰¹çއåªèƒ½è¨ç½®æˆçµ±ä¸€å€¼ï¼Œä¸é©ç”¨äºŽå„從機工作波特率ä¸ä¸€è‡´ã€åˆè¦æ±‚åŒæ™‚工作的系統。SP2338é›–ç„¶èƒ½æ»¿è¶³ä½ŽåŠŸè€—çš„è¦æ±‚,但其å䏲壿³¢ç‰¹çŽ‡ä¹Ÿéœ€è¦è¨ç½®ç‚ºçµ±ä¸€å€¼ï¼Œå¹¶ä¸”ä¸èƒ½å°æ•¸æ“šå¹€æ ¼å¼ç·¨ç¨‹ï¼Œæœ€é«˜æ³¢ç‰¹çŽ‡ä¹Ÿåªæœ‰9600bps。
  本文æå‡ºçš„æ–¹æ³•ä¸ï¼Œå„個å串å£çš„串行特性和æ¯ä¸²å£ç›¸åŒï¼Œä½¿ç”¨ç°¡å–®ï¼Œå 用系統資æºå°‘,易于控制(最少2個控制信號擴展3個串å£ï¼‰ï¼Œç©©å®šæ€§å¥½ã€‚å…¶åŠŸè€—å–æ±ºäºŽ4001å’Œ40106,它們的功耗都在mAç´šã€‚å…¶æœ€é«˜æ³¢ç‰¹çŽ‡å–æ±ºäºŽ4001å’Œ40106的響應速度,4001å’Œ40106çš„æœ€å¤§éŸ¿æ‡‰å»¶é²æ˜¯250ns,所以ç†è«–上最高波特率å¯é”4Mbpsã€‚æ¤æ–¹æ³•已經æˆåŠŸåœ°æ‡‰ç”¨äºŽä¸‰è¡¨é 傳系統。該方法的缺點是,它ä¸èƒ½ç”¨äºŽå¾žæ©Ÿå·¥ä½œæ³¢ç‰¹çއä¸ä¸€è‡´ã€åˆè¦æ±‚åŒæ™‚工作的系統。
çµèªž
  本文è¨è¨ˆäº†ä¸€ç¨®æ“´å±•串å£çš„æ–¹æ³•以解決在實際應用ä¸é‡åˆ°çš„主機串行å£è³‡æºä¸è¶³çš„å•題,目å‰è©²æ–¹æ³•已經æˆåŠŸåœ°æ‡‰ç”¨äºŽä¸‰è¡¨é 傳系統ä¸ã€‚在解決這個å•題的éŽç¨‹ä¸ï¼Œæœ¬æ–‡ä¹Ÿå°å…¶ä»–解決方案進行了比較。