reference : PG153-AXI Quad SPI v3.2 LogiCORE IP Product Guide.pdf
在使用MicroBlaze過程中,調用了此IP,所以有必須仔細學習下;
名詞:
XIP: eXecute In Place
Motorola M68HC11
支持特性:
*可配置的AXI4接口
*支持對DRR/DTR FIFO的突發操作;
*支持可配置的XIP模式操作;
*支持AXI4-Lite或者AXI4接口連接的32bit Slave;
*支持可配置的SPI模式:標准、雙、四模式;
*可編程的SPI時鍾相位和極性;
*可配置的FIFO深度,16、256深度;對XIP模式只支持64深度;
*Configurable slave Memories in dual and quad modes are: Mixed,Micro,Winbond,and Spansion;
*AXI 接口選項:
XIP 模式: 使能AXI4 和 AXI4-Lite接口,地址模式可以選擇24bit和32bit;
Performance 模式:使能AXI4接口;使用AXI4接口可以在核的發送和接收FIFO地址處啟用突發功能。當不使能performance模式時,AXI4-Lite將被使用。
*SPI 選項
模式可以選擇: standard/dual/quad
Transacton Width: 8/16/32
頻率比率:2~2048, 代表了SPI的sck = ext_spi_clk/ratio ;
NO. of Slave: 代表了slave的個數;1~32;
*寄存器:
AXI4-Lite寫訪問寄存器由32位AXI寫數據(* _wdata)信號更新,不受AXI寫數據選通(* _wstrb)信號的影響。對於寫入,AXI寫地址有效(* _awvalid)和AXI寫數據有效(* _wvalid)信號需要同時有效。
表2-3顯示了適用的寄存器集,無論是否使能Performance Mode,或禁止XIP模式。應單獨訪問某些AXI Quad SPI內核寄存器。這些寄存器是可配置的,可通過AXI4-Lite接口或AXI4接口(增強模式)訪問。 所有寄存器都以32位的形式訪問。
如果訪問不存在的寄存器,它們將返回OKAY響應。 這些寄存器的讀取返回0,寫入沒有任何影響。
*SPISRR: 寫入0xA,進行軟件復位;
*SPICR
*SPISR
*SPI DTR:
After the SPE bit is set to 1 in master mode or spisel is active in the slave mode,the data is transferred from the SPI DTR to the shift register.
1. DN-1位始終表示MSB位,與LSB優先或MSB優先傳輸選擇無關。 當傳輸寬度參數為8或16時,未使用的高位((AXI數據寬度-1)到N)被保留。
2.在標准SPI模式下,根據內核配置,該寄存器的寬度可以是8或16或32。 在雙通道或四通道SPI模式下,該寄存器為8位寬。
*SPI DRR
SPI數據接收寄存器(SPI DRR)用於讀取從SPI總線接收的數據。 這是一個雙緩沖寄存器。 每次完成傳輸后,接收的數據將被放入該寄存器中。 SPI架構沒有為從設備提供任何方法來限制總線上的流量; 因此,只有在最后一次SPI傳輸之前讀取了SPI DRR時,才會在每次完成的事務后更新SPI DRR。如果未讀取SPI DRR且已滿,則最近傳輸的數據將丟失並發生接收溢出中斷。 主SPI設備也會出現相同的情況。
在標准模式下,讀取空DRR FIFO會返回從錯誤。
*SPISSR:
SPI從選擇寄存器(SPISSR)包含一個長度為N的低有效,one-hot編碼的slave選擇矢量SS,其中N是從機數。
SS向量占據寄存器的最右位。 最多將一位置為低電平。 該位表示本地主站與之通信的從站。 SPISSR中的位分配如圖2-6所示,並在表2-9中進行了描述
*TX_FIFO_OCY:
僅當AXI Quad SPI內核配置了FIFO(FIFO深度= 16或256)時,才會出現SPI發送FIFO占用寄存器(TX_FIFO_OCY)。 如果它存在且發送FIFO不為空,則寄存器包含一個四位右對齊值,該值比FIFO中的元素數少一(占用率減1)。
該寄存器是只讀的。 寫入時,或當FIFO為空時讀取,寄存器內容不受影響。 確定發送FIFO為空/滿的唯一可靠方法是讀取SPI狀態寄存器中的Tx_Empty / Tx_Full狀態位或中斷狀態寄存器中的DTR空位。
*RX_FIFO_OCY:
僅當AXI Quad SPI內核配置了FIFO(FIFO深度= 16或256)時,才會出現SPI接收FIFO占用寄存器(RX_FIFO_OCY)。 如果寄存器存在且接收FIFO不為空,則寄存器包含一個四位右對齊值,該值比FIFO中的元素數少一(占用率減1)。
該寄存器是只讀的。 寫入(或FIFO為空時的讀取)不會影響寄存器內容。 確定接收FIFO為空/滿的唯一可靠方法是讀取SPI狀態寄存器中的Rx_Empty / Rx_Full狀態位。
*DGIER
默認[31]=0,全局使能處於disable狀態;
*IPISR
根據系統是否配置了FIFO,以及是否配置為主模式或從模式,最多可以有14種獨特的中斷條件。
沒有FIFO的系統有七個中斷。 中斷控制器中的32位中斷狀態寄存器可以獨立使能每個中斷。 IP中斷狀態寄存器(IPISR)收集所有中斷事件。 中斷寄存器是一個讀/寫切換寄存器。 將1寫入寄存器中的位位置會導致相應的位切換。 所有寄存器位在復位時清零。
*IPIER
中斷允許寄存器(IPIER)寄存器允許系統中斷輸出有效。 如果IPISR寄存器中的有效位對應於IPIER寄存器中的使能位,則會產生該中斷。 IPIER寄存器對IPISR的每個定義位都有一個使能位。 所有位在復位時清零。
* 編程順序:
寫使能命令順序:
1.通過置位SPICR(60h)的主禁止位來禁用主事務,並通過SPICR復位RX和TX FIFO。
示例:將0x1E6寫入SPICR
2.通過將0x06寫入SPIDTR來發出write enable命令。
3.通過向SPISSR(70h)寫入0x00來發出芯片選擇。
4.通過置低SPICR主禁止位來使能主事務。
5.通過將0x01寫入SPISSR來置低片選。
6.通過置位SPICR主禁止位來禁用主事務。
擦除命令序列:
1.通過SPICR復位RX和TX FIFO。
2.將扇區擦除命令(a)發送到SPIDTR以擦除閃存扇區地址后面的任何特定扇區或發出批量擦除命令(a)擦除整個閃存
然后是flash基地址。
示例:將0xD8寫入SPIDTR
3.通過向SPISSR寫入0x00來發出芯片選擇。
4.通過置低SPICR主禁止位來使能主事務。
5.通過將0x01寫入SPISSR來置低片選。
6.通過置位SPICR主禁止位來禁用主事務。
寫數據命令序列:
1.通過SPICR復位RX和TX FIFO。
2.將寫入數據命令(a)(b)發送到SPIDTR,以將數據寫入任何特定扇區
其次是閃存扇區地址。
3.使用要寫入閃存的數據填充SPIDTR; 最大數據大小取決於
配置的QSPI FIFO大小。
4.通過向SPISSR寫入0x00來發出芯片選擇。
5.通過置低SPICR主禁止位來使能主事務。
6.通過將0x01寫入SPISSR來置低片選。
7.通過置位SPICR主禁止位來禁用主事務。
讀取數據命令序列:
1.通過SPICR復位RX和TX FIFO。
2.將讀取數據命令(a)(b)發送到SPIDTR以從任何特定扇區讀取數據
其次是閃存扇區地址。
3.使用虛擬數據填充SPIDTR以從閃存中讀取所需數據。
4.通過向SPISSR(70h)寫入0x00來發出芯片選擇。
5.通過置低SPICR主禁止位來使能主事務。
6.通過將0x01寫入SPISSR來置低片選。
7.通過置位SPICR主禁止位來禁用主事務
8.讀取SPIDRR,以獲取從SPI總線接收的讀取數據。
a.參見相應的SPI Slave(閃存)數據表,了解要發出的命令。
b.寫入/讀取命令因使用的模式(標准/雙/四)而異。
推薦:https://www.cnblogs.com/chensimin1990/p/8526497.html#4105474