一種基于FPGA的CAN總線(xiàn)通信接口的設計
1.2 CAN總線(xiàn)接口電路
選用Philips公司的SJA1000作為CAN控制器,采用PCA82C250作為CAN收發(fā)器,并在CAN控制器與收發(fā)器之間使用6N137進(jìn)行光電隔離,以增強抗干擾能力。將MODE引腳接高電平即SJA1000工作在INTEL模式,引腳與復位芯片MAX706T的RESET引腳相連,進(jìn)行全局復位。在FPGA與SJA1000連接時(shí)需要使用741V164245電平轉換器完成CAN總線(xiàn)5 V TTL電平向3.3 V FPGA I/O電平的轉換。另外,SJA1000的RX1引腳與PCA-82C 250的VREF引腳相連,使用輸入比較器旁路功能,可減少內部延時(shí),增加正常通信的總線(xiàn)長(cháng)度。具體的接口電路如圖3所示。
2 FPGA邏輯控制程序
2.1 SJA1000邏輯控制
由于SJA1000地址線(xiàn)與數據總線(xiàn)復用,FPGA不僅僅要產(chǎn)生SJA1000讀寫(xiě)控制引腳的信號邏輯,還需要模擬單片機等處理器產(chǎn)生對SJA1000的尋址信號,實(shí)際上是一個(gè)向SJA1000寫(xiě)地址的過(guò)程。根據SJA1000技術(shù)手冊的時(shí)序要求,要完成對SJA1000內寄存器的正確讀寫(xiě),接口邏輯必須在地址鎖存信號ALE為高電平時(shí)將SJA1000的寄存器地址當作數據寫(xiě)入,然后在A(yíng)LE和片選信號為低電平后使能SJA1000的讀寫(xiě)控制信號(WR或RD)。SJA1000的邏輯控制采用狀態(tài)機的方式完成,狀態(tài)機流程圖如圖4所示。起始態(tài)為IDLE態(tài),當接收到數據讀寫(xiě)等命令時(shí),進(jìn)入ADDR-ESS態(tài),向SJA1000寫(xiě)入相應寄存器的地址值。然后根據命令類(lèi)型決定下一個(gè)態(tài)是寫(xiě)寄存器狀態(tài)(WR1~WR3)還是讀寄存器狀態(tài)(RD1~RD4)。以寫(xiě)寄存器為例,在WR1態(tài)ALE、
、
等信號置為非有效態(tài)。將
置為有效狀態(tài);在WR2態(tài)ALE、
為非有效態(tài).而將
信號置為有效態(tài),在時(shí)鐘的下降沿將數據寫(xiě)入寄存器。WR3狀態(tài)保持
有效,WR信號變?yōu)闊o(wú)效,進(jìn)入IDLE態(tài),一次寫(xiě)周期完成。
評論