本科項目上需要DSP通過RS232串口連接四個設備,可供使用的芯片串口只有一個。
方案一:利用手頭器件,簡單利用FPGA和max232電平轉換芯片采用片選方式設計
verilog代碼如下:
module demultiplexer1to4 (out0,out1,out2,out3,in,s2,s1,s0); output out0,out1,out2,out3; input in; input s0,s1,s2 ; reg out0,out1,out2,out3; always@(s0 or s1 or s2 or in) case({s2,s1,s0} ) 3'b001: begin out0 <= in; out1 <= 1'bz; out2 <= 1'bz; out3 <= 1'bz; end 3'b011: begin out0 <= 1'bz; out1 <= in; out2 <= 1'bz; out3 <= 1'bz; end 3'b010: begin out0 <= 1'bz; out1 <= 1'bz; out2 <= in; out3 <= 1'bz; end 3'b110: begin out0 <= 1'bz; out1 <= 1'bz; out2 <= 1'bz; out3 <= in; end 3'b111: begin out0 <= in; out1 <= in; out2 <= in; out3 <= in; end default: begin out0 <= 1'bz; out1 <= 1'bz; out2 <= 1'bz;out3 <= 1'bz; end endcase endmodule
優勢:可實現一對一發送和一對多發送;
缺點:需要器件、接線較多,不可靠。
出現問題:使用一段時間后,數據出現亂碼,分析是采用劣質max232芯片所導致,改用網申的美信原裝芯片,沒有繼續出現問題。但劣質max232芯片單獨使用電平轉換沒有問題。
方案二、接着我開始尋找集成芯片用以替代方案一,然后找到了成都國騰微電子有限公司的GM8125一擴五串口芯片.原理圖如下:
此芯片缺陷是不能夠一對多發送數據,只能一對一,倒也能滿足我使用需求。
經過了一個寒假回來,事情變的奇怪了,采用此轉換芯片發送的第一組數據出現亂碼,后續數據正常。
解決辦法,上電后先發送一組無用數據,跳過亂碼。當時因為時間關系沒有繼續查明原因。
簡單自制轉換電路(此電路不適用與全雙工工作):
RS232高電平: -3~ -15V
RS232低電平: +3~ +15V
RS232傳輸數據時空閑位為高電平,即-3~ -15V
發送數據時,USART_TXD(TTL或CMOS電平)為高電平,Q1截止,RS232_RXD電平為(0.7V(二極管壓降)+RS232_TXD),因RS232_TXD空閑時為高電平,則RS232_RXD也為高電平。
USART_TXD(TTL或CMOS電平)為低電平,Q1導通,RS232_RXD電平近似為VCC,表現在RS232電平上為低電平。
接收數據時,RS232_TXD為高電平,Q2截止,USART_RXD近似為VCC,表現在TTL或CMOS電平上為高電平。
RS232_TXD為低電平,Q2導通,USART_RXD電平接近為0,為低電平。