Zynq的PS端的SPI


Zynq

  賽靈思公司(Xilinx)推出的行業第一個可擴展處理平台Zynq系列。旨在為視頻監視、汽車駕駛員輔助以及工廠自動化等高端嵌入式應用提供所需的處理與計算性能水平。Zynq中包含FPGA資源和ARM資源,可用AXI片內總線進行互聯。

PS端的SPI

  在zynq中,PS端有兩個SPI控制器,每個控制器可以接3個設備,因為zynq除了ARM之外,還含有FPGA資源,因此可以利用FPGA資源將SPI控制器可控制的設備進行一個擴展,本次在使用SPI中遇到了一些問題,在此記下。

使用SPI控制DAC8811的問題描述

  設計中,做了一個程控放大器,采用的芯片是DAC8811,這個芯片是采用SPI進行通訊,它里面是一個16位的寄存器,每次通過SPI寫這個16位的寄存器就可以達到調整輸出的目的。但是使用zynq的SPI控制控制該設備后,因為zynq提供的SPI的裸機驅動,每次只能發送一個字節,因此控制DAC8811的寄存器更新需要發送兩個字節。我使用spi連續發送兩個字節后,程控放大器的放大倍數和我設置的有區別,更改寫入的值出現貌似無規律的跳變,無法對該芯片進行正常的控制。

原因

  將spi輸出的信號利用示波器進行觀察,發現似乎並沒有什么毛病,於是我將時鍾信號和片選信號都進行觀察,利用片選信號的上升沿捕捉信號,發現在發送了第一個字節后發第二個自字節的中間,片選信號由低電平跳變為高電平,這個時間是很短的,可以認為這是一個高頻信號。而DAC8811在片選信號上升沿時將會將寄存器中的值更新到輸出,這樣實際上就是寄存器只接收了一個字節就更新了,本來是應該接收兩個字節后更新的。

  查看zynq的spi代碼,里面是有設置各個延時的函數的,但是設置了延時到最小值,還是會出現着這樣的問題。

解決方案

  方案一:使用zynq的PL資源寫一個高頻濾波器,對片選信號進行濾波,已達到將高頻跳變去除。

  方案二:高頻的東西濾除更簡單的是使用電容,根據容抗的計算公式:
  電容值越小,容抗越大,在這里將片選信號線對地接一個2nF的電容即可達到目的。
  為了解決這個問題,我是通過加電容實現的。因此設計時應該在片選信號和地之間預留一個接電容的空間。
根本原因
   產生這種現象的根本原因是ps端配置不對造成。

 

 

這樣配置即可解決。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM