談?wù)剬C32F460芯片的QSPI理解
網(wǎng)站:bbs.21ic.com
近在學(xué)習(xí)華大的HC32F460這個(gè)芯片,今天想說說我對QSPI的理解
一、定義
QSPI是Queued SPI的簡寫,是Motorola公司推出的SPI接口的擴(kuò)展,比SPI應(yīng)用更加廣泛。
在SPI協(xié)議的基礎(chǔ)上,Motorola公司對其功能進(jìn)行了增強(qiáng),增加了隊(duì)列傳輸機(jī)制,推出了隊(duì)列串行外圍接口協(xié)議(即QSPI協(xié)議)。 QSPI 是一種專用的通信接口,連接單、雙或四(條數(shù)據(jù)線)SPI Flash 存儲(chǔ)介質(zhì)。
二. 六種讀指令的方式
1. 標(biāo)準(zhǔn)讀指令
1.1串行總線周期開始
1.2串行閃存選擇信號被置為有效狀態(tài)
1.3從QSIO0管腳輸出該指令的指令代碼(03h/13h)*
1 1.4輸出目標(biāo)地址,該地址的寬度可以通過 QSFCR 寄存器中的AWSL[1:0]位來設(shè)置
1.5接收數(shù)據(jù),QSPI 的初始狀態(tài)選擇的指令就是標(biāo)準(zhǔn)讀指令。
2. 快速讀指令
2.1 串行總線周期開始
2.2 串行閃存選擇信號被置為有效狀態(tài)
2.3 從QSIO0管腳輸出該指令的指令代碼(0Bh/0Ch)
2.4 輸出目標(biāo)地址,地址寬度可以通過 QSFCR 寄存器中的 AWSL[1:0]位來設(shè)置
2.5 地址輸出后是一定數(shù)量的虛擬周期,其具體數(shù)量由 QSFCR 寄存器中的 DMCYCN[3:0]決定。
2.6 數(shù)據(jù)接收
3. 二線式輸出快速讀指令 二線式輸出快速讀是一種使用兩根信號線進(jìn)行數(shù)據(jù)接收的讀指令。
3.1 總線周期開始
3.2 串行閃存選擇信號被置為有效狀態(tài)
3.3 從QSIO0管腳輸出該指令的指令代碼(3Bh/3Ch)和目標(biāo)地址,地址寬度可以通過 QSFCR 寄存器中的AWSL[1:0]位來設(shè)置。
3.4 一定數(shù)量的虛擬周期,其具體數(shù)量由 QSFCR 寄存器中的 DMCYCN[3:0]決定
3.5 通過 QSIO0 和 QSIO1 兩根管腳進(jìn)行數(shù)據(jù)接收。偶位數(shù)據(jù)在 QSIO0 接收,奇位在 QSIO1。
4. 二線式輸入輸出快速讀指令 二線式輸入輸出快速讀是一種使用兩根信號線進(jìn)行地址發(fā)送和數(shù)據(jù)接收的讀指令。
4.1 串行總線周期開始
4.2 串行閃存選擇信號被置為有效狀態(tài)
4.3 QSIO0 管腳輸出該指令的指令代碼(BBh/BCh)。
4.4 從 QSIO0 和 QSIO1兩個(gè)管腳輸出目標(biāo)地址,地址寬度可以通過 QSFCR 寄存器中的 AWSL[1:0]位來設(shè)置。
4.5 一定數(shù)量的虛擬周期,其具體數(shù)量由 QSFCR 寄存器中的 DMCYCN[3:0]決定。
4.6 通過 QSIO0 和 QSIO1 兩根管腳進(jìn)行數(shù)據(jù)接收。偶數(shù)位的地址和虛擬周期(包括 XIP 模式選擇信息)的傳輸及數(shù)據(jù)接收使用 QSIO0 管腳,奇數(shù)位使用 QSIO1管腳。
5. 四線式輸出快速讀指令 四線式輸出快速讀是一種使用四根信號線進(jìn)行數(shù)據(jù)接收的讀指令。
5.1 當(dāng)一個(gè)串行總線周期開始的時(shí)候
5.2 串行閃存選擇信號被置為有效狀態(tài)
5.3 QSIO0 管腳輸出該指令的指令代碼(6Bh/6Ch)和目標(biāo)地址,地址寬度通過 QSFCR 寄存器中的AWSL[1:0]位來設(shè)置
5.4 在這之后是一定數(shù)量的虛擬周期,其具體數(shù)量由 QSFCR 寄存器中的 DMCYCN[3:0]決定
5.5 通過 QSIO0,QSIO1,QSIO2 和 QSIO3 四根管腳進(jìn)行數(shù)據(jù)接收。
6. 四線式輸入輸出快速讀指令 四線式輸入輸出快速讀是一種使用四根信號線進(jìn)行地址發(fā)送和數(shù)據(jù)接收的讀指令。
6.1 串行總線周期開始
6.2 串行閃存選擇信號被置為有效狀態(tài)
6.3 從QSIO0 管腳輸出該指令的指令代碼(EBh/ECh)
6.4 從 QSIO0,QSIO1,QSIO2 和 QSIO3 四個(gè)管腳輸出目標(biāo)地址,地址寬度可以通過 QSFCR 寄存器中的AWSL[1:0]位來設(shè)置。
6.5 一定數(shù)量的虛擬周期,具體數(shù)量由 QSFCR 寄存器中的 DMCYCN[3:0]決定
6.6 通過 QSIO0,QSIO1,QSIO2 和 QSIO3 四根管腳進(jìn)行數(shù)據(jù)接收。
通過以上的介紹,大家應(yīng)該能看的很清楚各種的數(shù)據(jù)讀取方式的共同點(diǎn)和不同點(diǎn)是什么 共同點(diǎn)都是需要同步時(shí)鐘和片選信號
不同點(diǎn)就是發(fā)送數(shù)據(jù)的時(shí)用的是幾個(gè)引腳發(fā)送的,接收數(shù)據(jù)的時(shí)候是用的幾個(gè)引腳
三 .示例解析
數(shù)據(jù)讀取方式大家都清楚了,下面貼一個(gè)4線輸入輸出快速讀取的初始化函數(shù)配置過程,首先代碼如下 :
/* QSPCK Port/Pin definition */ /* QSNSS Port/Pin definition */ /* QSIO0 Port/Pin definition */ /* QSIO1 Port/Pin definition */ /* QSIO2 Port/Pin definition */ /* QSIO3 Port/Pin definition */
引腳的功能如上圖所示
如果是SPI通訊的話是4根線,一個(gè)時(shí)鐘線,一個(gè)片選線,兩個(gè)數(shù)據(jù)線MISO和MOSI
引腳既然比SPI多那么傳輸?shù)乃俣瓤隙ㄒ惨萐PI速度快,所以在應(yīng)用上可以來與片外的ROM RAM FLASH等進(jìn)行通訊
宏定義大家都看到了對吧,下面是配置部分代碼如下 :
static void QspiFlash_Init(void){ stc_qspi_init_t stcQspiInit; /* configuration structure initialization */ MEM_ZERO_STRUCT(stcQspiInit); /* Configuration peripheral clock */ PWC_Fcg1PeriphClockCmd(PWC_FCG1_PERIPH_QSPI, Enable); /* Configuration QSPI pin */ PORT_SetFunc(QSPCK_PORT, QSPCK_PIN, Func_Qspi, Disable); PORT_SetFunc(QSNSS_PORT, QSNSS_PIN, Func_Qspi, Disable); PORT_SetFunc(QSIO0_PORT, QSIO0_PIN, Func_Qspi, Disable); PORT_SetFunc(QSIO1_PORT, QSIO1_PIN, Func_Qspi, Disable); PORT_SetFunc(QSIO2_PORT, QSIO2_PIN, Func_Qspi, Disable); PORT_SetFunc(QSIO3_PORT, QSIO3_PIN, Func_Qspi, Disable); /* Configuration QSPI structure */ stcQspiInit.enClkDiv = QspiHclkDiv3; stcQspiInit.enSpiMode = QspiSpiMode3; stcQspiInit.enBusCommMode = QspiBusModeRomAccess; stcQspiInit.enPrefetchMode = QspiPrefetchStopComplete; stcQspiInit.enPrefetchFuncEn = Disable; stcQspiInit.enQssnValidExtendTime = QspiQssnValidExtendSck32; stcQspiInit.enQssnIntervalTime = QspiQssnIntervalQsck8; stcQspiInit.enQsckDutyCorr = QspiQsckDutyCorrHalfHclk; stcQspiInit.enVirtualPeriod = QspiVirtualPeriodQsck8; stcQspiInit.enWpPinLevel = QspiWpPinOutputHigh; stcQspiInit.enQssnSetupDelayTime = QspiQssnSetupDelay1Dot5Qsck; stcQspiInit.enQssnHoldDelayTime = QspiQssnHoldDelay1Dot5Qsck; stcQspiInit.enFourByteAddrReadEn = Disable; stcQspiInit.enAddrWidth = QspiAddressByteThree; stcQspiInit.stcCommProtocol.enReadMode = QspiReadModeFourWiresOutput; stcQspiInit.stcCommProtocol.enTransInstrProtocol = QspiProtocolExtendSpi; stcQspiInit.stcCommProtocol.enTransAddrProtocol = QspiProtocolExtendSpi; stcQspiInit.stcCommProtocol.enReceProtocol = QspiProtocolExtendSpi; stcQspiInit.u8RomAccessInstr = QSPI_3BINSTR_FOUR_WIRES_OUTPUT_READ; QSPI_Init(&stcQspiInit);} 其實(shí)這部分配置代碼特別好理解咱們分開來看 stc_qspi_init_t stcQspiInit;//首先是定義了一個(gè)stc_qspi_init_t 類型的局部變量stcQspiInit MEM_ZERO_STRUCT(stcQspiInit);//對stcQspiInit初始化清零操作 PWC_Fcg1PeriphClockCmd(PWC_FCG1_PERIPH_QSPI, Enable);//開啟QSPI電源,也就是要用到這個(gè)功能了 //功能定義引腳名稱功能 PORT_SetFunc(QSPCK_PORT, QSPCK_PIN, Func_Qspi, Disable); PORT_SetFunc(QSNSS_PORT, QSNSS_PIN, Func_Qspi, Disable); PORT_SetFunc(QSIO0_PORT, QSIO0_PIN, Func_Qspi, Disable); PORT_SetFunc(QSIO1_PORT, QSIO1_PIN, Func_Qspi, Disable); PORT_SetFunc(QSIO2_PORT, QSIO2_PIN, Func_Qspi, Disable); PORT_SetFunc(QSIO3_PORT, QSIO3_PIN, Func_Qspi, Disable); //下面是重點(diǎn)了,對參數(shù)進(jìn)行配置,我們來看看都配置了哪些寄存器 stcQspiInit.enClkDiv = QspiHclkDiv3; //QspiHclkDiv3 = 2u, //Clock source: HCLK/3 //串行接口基準(zhǔn)時(shí)鐘選擇 // b5 b4 b3 b2 b1 b0 // 0 0 0 0 0 0:2個(gè)HCLK周期 // 0 0 0 0 0 1:2個(gè)HCLK周期* // 0 0 0 0 1 0:3個(gè)HCLK周期 // 0 0 0 0 1 1:4個(gè)HCLK周期* stcQspiInit.enSpiMode = QspiSpiMode3;//QspiSpiMode3 = 1u, PI模式選擇 0:SPI模式0 1:SPI模式3 stcQspiInit.enBusCommMode = QspiBusModeRomAccess; //訪問模式QspiBusModeRomAccess = 0u, Rom access mode //QSPI總線通信模式選擇 //0:ROM訪問模式 //1:直接通信模式 stcQspiInit.enPrefetchMode = QspiPrefetchStopComplete; //QspiPrefetchStopComplete = 0u, //Stop after prefetch data complete //選擇重置預(yù)讀取動(dòng)作的位置 //0:當(dāng)前的預(yù)讀取動(dòng)作在字節(jié)邊界中止 //1:當(dāng)前的預(yù)讀取動(dòng)作即時(shí)中止 stcQspiInit.enPrefetchFuncEn = Disable; //預(yù)讀取功能有效/無效選擇 //0:預(yù)讀取功能無效 //1:預(yù)讀取功能有效 stcQspiInit.enQssnValidExtendTime = QspiQssnValidExtendSck32; // QspiQssnValidExtendSck32 = 1u, // QSSN valid time extend 32 QSCK cycles // QSPI總線訪問后QSSN有效時(shí)間延長功能選擇 // b5 b4 // 0 0:不延長QSSN有效時(shí)間0 // 0 1:將QSSN有效時(shí)間延長32個(gè)QSCK 周期1 // 1 0:將QSSN有效時(shí)間延長128個(gè)QSCK 周期2 // 1 1:將QSSN有效時(shí)間無限延長3 stcQspiInit.enQssnIntervalTime = QspiQssnIntervalQsck8; //QspiQssnIntervalQsck8 = 7u, //QSSN signal min interval time 8 QSCK //QSSN信號最小無效時(shí)間選擇 // b3 b2 b1 b0 //0 0 0 0:1個(gè)QSCK周期 //0 0 0 1:2個(gè)QSCK周期 stcQspiInit.enQsckDutyCorr = QspiQsckDutyCorrHalfHclk; //QspiQsckDutyCorrHalfHclk = 1u, //QSCK's rising edge delay 0.5 HCLK cycle when Qsck select HCLK is odd //QSCK輸出波形占空比補(bǔ)正 //0:不進(jìn)行占空比補(bǔ)正 //1:將QSCK的上升沿滯后0.5個(gè)HCLK周期 //(當(dāng)QSCK選擇的頻率是HCLK的奇數(shù)倍時(shí)有效) stcQspiInit.enVirtualPeriod = QspiVirtualPeriodQsck8; QspiVirtualPeriodQsck8 = 7u,Virtual period select 8 QSCK //使用快速讀指令時(shí)虛擬周期數(shù)量選擇 //b3 b2 b1 b0 //0 0 0 0:3個(gè)QSCK周期*1 //0 0 0 1:4個(gè)QSCK周期 //0 0 1 0:5個(gè)QSCK周期 stcQspiInit.enWpPinLevel = QspiWpPinOutputHigh; //QspiWpPinOutputHigh = 1u, //WP pin(QIO2) output high level //WP管腳(QIO2)電平設(shè)置 //0:低電平 //1:高電平 stcQspiInit.enQssnSetupDelayTime = QspiQssnSetupDelay1Dot5Qsck; //QspiQssnSetupDelay1Dot5Qsck = 1u, //QSSN setup delay 1.5 QSCK output than QSCK first rising edge //QSSN信號輸出時(shí)序選擇 //0:比QSCK第一個(gè)上升沿提前0.5個(gè)QSCK輸出QSSN //1:比QSCK第一個(gè)上升沿提前1.5個(gè)QSCK輸出QSSN stcQspiInit.enQssnHoldDelayTime = QspiQssnHoldDelay1Dot5Qsck; //QspiQssnHoldDelay1Dot5Qsck = 1u, //QSSN hold delay 1.5 QSCK release than QSCK last rising edge //QSSN信號釋放時(shí)序選擇 //0:比QSCK最后一個(gè)上升沿滯后0.5個(gè)QSCK釋放QSSN //1:比QSCK最后一個(gè)上升沿滯后1.5個(gè)QSCK釋放QSSN stcQspiInit.enFourByteAddrReadEn = Disable; // 當(dāng)?shù)刂穼挾葹?字節(jié)時(shí)的讀指令代碼選擇 //0:不使用4字節(jié)地址讀指令代碼 //1:使用4字節(jié)地址讀指令代碼 stcQspiInit.enAddrWidth = QspiAddressByteThree; //QspiAddressByteThree = 2u, Three byte address //串行接口地址寬度選擇 //b1 b0 //0 0:1字節(jié) //0 1:2字節(jié) //1 0:3字節(jié) //1 1:4字節(jié) stcQspiInit.stcCommProtocol.enReadMode = QspiReadModeFourWiresOutput; // QspiReadModeFourWiresIO = 5u, // Four wires input/output fast read //串行接口讀取模式選擇 //b2 b1 b0 //0 0 0:標(biāo)準(zhǔn)讀0 //0 0 1:快速讀1 //0 1 0:二線式輸出快速讀2 //0 1 1:二線式輸入輸出快速讀3 //1 0 0:四線式輸出快速讀4 //1 0 1:四線式輸入輸出快速讀5 //1 1 0:自定義標(biāo)準(zhǔn)讀6 //1 1 1:自定義快速讀7 stcQspiInit.stcCommProtocol.enTransInstrProtocol = QspiProtocolExtendSpi; stcQspiInit.stcCommProtocol.enTransAddrProtocol = QspiProtocolExtendSpi; stcQspiInit.stcCommProtocol.enReceProtocol = QspiProtocolExtendSpi; QspiProtocolExtendSpi = 0u, Extend spi protocol 指令發(fā)送階段SPI協(xié)議選擇。 地址發(fā)送階段SPI協(xié)議選擇 數(shù)據(jù)接收階段SPI協(xié)議選擇 b1 b0 0 0:擴(kuò)展式SPI協(xié)議 0 1:二線式SPI協(xié)議 1 0:四線式SPI協(xié)議 1 1:設(shè)定禁止 stcQspiInit.u8RomAccessInstr = QSPI_3BINSTR_FOUR_WIRES_OUTPUT_READ; //0xEBu //替換指令代碼 用于替代默認(rèn)指令的串行閃存指令代碼 QSPI_Init(&stcQspiInit); 以上就是我總結(jié)的QSPI的初始化部分 因?yàn)镠C32F460有自己QSPI庫函數(shù),在應(yīng)用的時(shí)候大家可以根據(jù)需要來調(diào)用庫函數(shù)進(jìn)行通訊 四. 庫函數(shù)
/*********************************************************************************** \brief De-Initialize QSPI unit**** \param [in] None**** \retval Ok Process successfully done********************************************************************************/en_result_t QSPI_DeInit(void)
/*********************************************************************************** \brief Initialize QSPI unit**** \param [in] pstcQspiInitCfg Pointer to qspi configuration** \arg See the struct #stc_qspi_init_t**** \retval Ok Process successfully done** \retval Error Parameter error********************************************************************************/en_result_t QSPI_Init(const stc_qspi_init_t *pstcQspiInitCfg)
/*********************************************************************************** \brief Config communication protocol structure**** \param [in] pstcCommProtocol Pointer to qspi communication protocol configuration** \arg See the struct #stc_qspi_comm_protocol_t**** \retval Ok Process successfully done** \retval Error Parameter error********************************************************************************/en_result_t QSPI_CommProtocolConfig(const stc_qspi_comm_protocol_t *pstcCommProtocol)
/*********************************************************************************** \brief Enable or disable prefetch function**** \param [in] enNewSta The function new state** \arg Disable Disable prefetch function** \arg Enable Enable prefetch function**** \retval Ok Process successfully done********************************************************************************/en_result_t QSPI_PrefetchCmd(en_functional_state_t enNewSta)
/*********************************************************************************** \brief Set clock division**** \param [in] enClkDiv Clock division** \arg QspiHclkDiv2 Clock source: HCLK/2** \arg QspiHclkDiv3 Clock source: HCLK/3** \arg QspiHclkDiv4 Clock source: HCLK/4** \arg QspiHclkDiv5 Clock source: HCLK/5** \arg QspiHclkDiv6 Clock source: HCLK/6** \arg QspiHclkDiv7 Clock source: HCLK/7** \arg QspiHclkDiv8 Clock source: HCLK/8** \arg QspiHclkDiv9 Clock source: HCLK/9** \arg QspiHclkDiv10 Clock source: HCLK/10** \arg QspiHclkDiv11 Clock source: HCLK/11** \arg QspiHclkDiv12 Clock source: HCLK/12** \arg QspiHclkDiv13 Clock source: HCLK/13** \arg QspiHclkDiv14 Clock source: HCLK/14** \arg QspiHclkDiv15 Clock source: HCLK/15** \arg QspiHclkDiv16 Clock source: HCLK/16** \arg QspiHclkDiv17 Clock source: HCLK/17** \arg QspiHclkDiv18 Clock source: HCLK/18** \arg QspiHclkDiv19 Clock source: HCLK/19** \arg QspiHclkDiv20 Clock source: HCLK/20** \arg QspiHclkDiv21 Clock source: HCLK/21** \arg QspiHclkDiv22 Clock source: HCLK/22** \arg QspiHclkDiv23 Clock source: HCLK/23** \arg QspiHclkDiv24 Clock source: HCLK/24** \arg QspiHclkDiv25 Clock source: HCLK/25** \arg QspiHclkDiv26 Clock source: HCLK/26** \arg QspiHclkDiv27 Clock source: HCLK/27** \arg QspiHclkDiv28 Clock source: HCLK/28** \arg QspiHclkDiv29 Clock source: HCLK/29** \arg QspiHclkDiv30 Clock source: HCLK/30** \arg QspiHclkDiv31 Clock source: HCLK/31** \arg QspiHclkDiv32 Clock source: HCLK/32** \arg QspiHclkDiv33 Clock source: HCLK/33** \arg QspiHclkDiv34 Clock source: HCLK/34** \arg QspiHclkDiv35 Clock source: HCLK/35** \arg QspiHclkDiv36 Clock source: HCLK/36** \arg QspiHclkDiv37 Clock source: HCLK/37** \arg QspiHclkDiv38 Clock source: HCLK/38** \arg QspiHclkDiv39 Clock source: HCLK/39** \arg QspiHclkDiv40 Clock source: HCLK/40** \arg QspiHclkDiv41 Clock source: HCLK/41** \arg QspiHclkDiv42 Clock source: HCLK/42** \arg QspiHclkDiv43 Clock source: HCLK/43** \arg QspiHclkDiv44 Clock source: HCLK/44** \arg QspiHclkDiv45 Clock source: HCLK/45** \arg QspiHclkDiv46 Clock source: HCLK/46** \arg QspiHclkDiv47 Clock source: HCLK/47** \arg QspiHclkDiv48 Clock source: HCLK/48** \arg QspiHclkDiv49 Clock source: HCLK/49** \arg QspiHclkDiv50 Clock source: HCLK/50** \arg QspiHclkDiv51 Clock source: HCLK/51** \arg QspiHclkDiv52 Clock source: HCLK/52** \arg QspiHclkDiv53 Clock source: HCLK/53** \arg QspiHclkDiv54 Clock source: HCLK/54** \arg QspiHclkDiv55 Clock source: HCLK/55** \arg QspiHclkDiv56 Clock source: HCLK/56** \arg QspiHclkDiv57 Clock source: HCLK/57** \arg QspiHclkDiv58 Clock source: HCLK/58** \arg QspiHclkDiv59 Clock source: HCLK/59** \arg QspiHclkDiv60 Clock source: HCLK/60** \arg QspiHclkDiv61 Clock source: HCLK/61** \arg QspiHclkDiv62 Clock source: HCLK/62** \arg QspiHclkDiv63 Clock source: HCLK/63** \arg QspiHclkDiv64 Clock source: HCLK/64**** \retval Ok Process successfully done********************************************************************************/en_result_t QSPI_SetClockDiv(en_qspi_clk_div_t enClkDiv)
/*********************************************************************************** \brief Set WP Pin level**** \param [in] enWpLevel WP pin level** \arg QspiWpPinOutputLow WP pin(QIO2) output low level** \arg QspiWpPinOutputHigh WP pin(QIO2) output high level**** \retval Ok Process successfully done********************************************************************************/en_result_t QSPI_SetWPPinLevel(en_qspi_wp_pin_level_t enWpLevel)
/*********************************************************************************** \brief Set communication address width**** \param [in] enAddrWidth Communication address width** \arg QspiAddressByteOne One byte address** \arg QspiAddressByteTwo Two byte address** \arg QspiAddressByteThree Three byte address** \arg QspiAddressByteFour Four byte address**** \retval Ok Process successfully done********************************************************************************/en_result_t QSPI_SetAddrWidth(en_qspi_addr_width_t enAddrWidth)
/*********************************************************************************** \brief Set extend address value**** \param [in] u8Addr Extend address value** \arg 0~0x3F**** \retval Ok Process successfully done********************************************************************************/en_result_t QSPI_SetExtendAddress(uint8_t u8Addr)
/*********************************************************************************** \brief Set rom access instruction**** \param [in] u8Instr Rom access instruction** \arg 0~0xFF**** \retval Ok Process successfully done********************************************************************************/en_result_t QSPI_SetRomAccessInstruct(uint8_t u8Instr)
/*********************************************************************************** \brief Read direct communication value**** \param [in] None**** \retval uint8_t Direct communication read value********************************************************************************/uint8_t QSPI_ReadDirectCommValue(void)
/*********************************************************************************** \brief Enable or disable xip mode**** \param [in] u8Instr Enable or disable xip mode instruction** \arg 0~0xFF**** \param [in] enNewSta The function new state** \arg Disable Disable xip mode** \arg Enable Enable xip mode**** \retval Ok Process successfully done********************************************************************************/en_result_t QSPI_XipModeCmd(uint8_t u8Instr, en_functional_state_t enNewSta)
/*********************************************************************************** \brief Enter direct communication mode**** \param [in] None**** \retval Ok Process successfully done**** \note If you are in XIP mode, you need to exit XIP mode and then start direct communication mode.********************************************************************************/en_result_t QSPI_EnterDirectCommMode(void)
/*********************************************************************************** \brief Exit direct communication mode**** \param [in] None**** \retval Ok Process successfully done********************************************************************************/en_result_t QSPI_ExitDirectCommMode(void)
/*********************************************************************************** \brief Get prefetch buffer current byte number**** \param [in] None**** \retval uint8_t Current buffer byte number********************************************************************************/uint8_t QSPI_GetPrefetchBufferNum(void)
/*********************************************************************************** \brief Get flag status**** \param [in] enFlag Choose need get status's flag** \arg QspiFlagBusBusy QSPI bus work status flag in direct communication mode** \arg QspiFlagXipMode XIP mode status signal** \arg QspiFlagRomAccessError Trigger rom access error flag in direct communication mode** \arg QspiFlagPrefetchBufferFull Prefetch buffer area status signal** \arg QspiFlagPrefetchStop Prefetch action status signal**** \retval Set Flag is set** \retval Reset Flag is reset********************************************************************************/en_flag_status_t QSPI_GetFlag(en_qspi_flag_type_t enFlag)
/*********************************************************************************** \brief Clear flag status**** \param [in] enFlag Choose need get status's flag** \arg QspiFlagRomAccessError Trigger rom access error flag in direct communication mode**** \retval Ok Process successfully done** \retval ErrorInvalidParameter Parameter error********************************************************************************/en_result_t QSPI_ClearFlag(en_qspi_flag_type_t enFlag) 以上就是庫函數(shù)部分,大家可以來調(diào)用庫函數(shù)進(jìn)行編程,如果技術(shù)好的可以直接調(diào)用寄存器來寫 ^_^本文系21ic論壇網(wǎng)友 binoo7原創(chuàng)
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!