STM32F7 14 Quad-SPI interface (QUADSPI)

Started by tha, November 22, 2022, 02:04:44 PM

Previous topic - Next topic

tha

Dummy-cycles phase

ใน the dummy-cycles phase, 1-31 cycles ถูกให้โดยไม่มี data ใดๆถูกส่งหรือถูกรับ, เพื่ออนุญาตให้ the Flash memory มีเวลาเตรียมสำหรับ the data phase เมื่อ higher clock frequencies ถูกใช้. จำนวนของ cycles ที่ให้ในระหว่าง phase นี้ถูกระบุใน the DCYC[4:0] field ของ QUADSPI_CCR[22:18] register. ในทั้ง SDR and DDR modes, the duration ถูกระบุเป็นจำนวนของ full CLK cycles.

เมื่อ DCYC เป็นศูนย์, the dummy-cycles phase จะถูกข้าม, และ the command sequence จะดำเนินการต่อโดยตรงไปยัง the data phase, ถ้ามี.

The operating mode of the dummy-cycles phase ถูกกำหนดโดย DMODE.

เพื่อให้มั่นใจว่าจะมีเวลา "กลับตัว" เพียงพอสำหรับการเปลี่ยน the data signals จาก output mode ไปเป็น input mode, ต้องมีอย่างน้อย one dummy cycle เมื่อใช้ dual or quad mode เพื่อรับ data จาก the Flash memory.

tha

Data phase

ในระหว่าง the data phase, จำนวนใดๆของ bytes สามารถูกส่งถึง, หรือรับจาก the Flash memory.

ใน indirect and automatic-polling modes, จำนวนของ bytes ที่จะถูกส่ง/ถูกรับถูกระบุไว้ใน the QUADSPI_DLR register.

ใน indirect write mode the data ที่จะถูกส่งไปยัง the Flash memory ต้องถูกเขียนลงใน the QUADSPI_DR register, ในขณะที่ใน indirect read mode the data ที่รับจาก the Flash memory ได้รับโดยการอ่านจาก the QUADSPI_DR register.

ใน memory-mapped mode, the data ซึ่งถูกอ่านจะถูกส่งกลับโดยตรงไปบน the AHB ไปยัง the Cortex หรือไปยัง a DMA.

The data phase สามารถส่ง/รับ 1 bit ในแต่ละครั้ง (บน SO/SI ใน single SPI mode), 2 bits ในแต่ละครั้ง (บน IO0/IO1 ใน dual SPI mode), หรือ 4 bits ในแต่ละครั้ง (บน IO0/IO1/IO2/IO3 ใน quad SPI mode). นี้สามารถถูกกำหนดค่าโดยใช้ the ABMODE[1:0] field ของ QUADSPI_CCR[15:14] register.

เมื่อ DMODE = 00, the data phase จะถูกข้าม, และ the command sequence เสร็จสิ้นโดยทันทีโดยการพุ่งขึ้นของ nCS. การกำหนดค่านี้ต้องถูกใช้เฉพาะใน indirect write mode เท่านั้น.

tha

14.3.4 QUADSPI signal interface protocol modes

Single SPI mode

Legacy SPI mode ยอมให้เพียง a single bit ถูกส่ง/ถูกรับแบบอนุกรม. ในโหมดนี้, data จะถูกส่งไปยัง the Flash memory บน the SO signal (ซึ่ง I/O แชร์กันกับ IO0). Data ที่รับจาก the Flash memory มาถึงโดยทาง SI (ซึ่ง I/O แชร์กันกับ IO1).

เฟสต่างๆแต่ละเฟสสามารถถูกกำหนดค่าแยกกันเพื่อใช้ single bit mode นี้โดยการเซ็ต the IMODE/ADMODE/ABMODE/DMODE fields (ใน QUADSPI_CCR) เป็น 01.

ในแต่ละ phase ซึ่งถูกกำหนดค่าใน single mode:
•   IO0 (SO) อยู่ใน output mode
•   IO1 (SI) อยู่ใน input mode (high impedance)
•   IO2 อยู่ใน output mode และถูกบังคับเป็น '0' (เพื่อทำให้ไม่ทำงาน the "write protect" function)
•   IO3 is in output mode และถูกบังคับเป็น '1' (เพื่อทำให้ไม่ทำงาน the "hold" function)

นี้เป็นกรณีแม้แต่สำหรับ the dummy phase ถ้า DMODE = 01.


tha

Dual SPI mode

ใน dual SPI mode, two bits ถูกส่ง/ถูกรับพร้อมกันบน the IO0/IO1 signals.

เฟสต่างๆแต่ละเฟสสามารถถูกกำหนดค่าแยกกันเพื่อใช้ dual SPI mode โดยการเซ็ต the IMODE/ADMODE/ABMODE/DMODE fields of QUADSPI_CCR register เป็น 10.

ในแต่ละ phase ซึ่งถูกกำหนดค่าใน dual mode:
•   IO0/IO1 อยู่ที่ high-impedance (input) ในระหว่าง the data phase สำหรับ read operations, และเป็น outputs ในกรณีอื่น
     ทั้งหมด
•   IO2 อยู่ใน output mode และถูกบังคับเป็น '0'
•   IO3 อยู่ใน output mode และถูกบังคับเป็น '1'

ใน the dummy phase เมื่อ DMODE = 01, IO0/IO1 เป็น high-impedance เสมอ

tha

Quad SPI mode

ใน quad SPI mode, four bits ถูกส่ง/ถูกรับพร้อมกันบน the IO0/IO1/IO2/IO3 signals.

เฟสต่างๆแต่ละเฟสสามารถถูกกำหนดค่าแยกกันเพื่อใช้ quad SPI mode โดยการเซ็ต the IMODE/ADMODE/ABMODE/DMODE fields of QUADSPI_CCR register เป็น 11.

ในแต่ละ phase ซึ่งถูกกำหนดค่าใน quad mode, IO0/IO1/IO2/IO3 จะอยู่ที่ high-impedance ทั้งหมด (input) ในระหว่าง the data phase สำหรับ read operations, และเป็น outputs ในกรณีอื่นทั้งหมด.

ใน the dummy phase เมื่อ DMODE = 11, IO0/IO1/IO2/IO3 จะเป็น high-impedance ทั้งหมด.

IO2 and IO3 ถูกใช้เฉพาะใน Quad SPI mode. ถ้าไม่มี the phases ใดถูกกำหนดค่าเพื่อใช้ Quad SPI mode, ดังนั้น the pins ที่ตรงกันกับ IO2 and IO3 สามารถถูกใช้สำหรับฟังชั่นอื่นแม้แต่ในขณะที่ QUADSPI แอคทีฟ.

tha

SDR mode

โดยค่าเริ่มต้น, the DDRM bit (QUADSPI_CCR[31]) เป็น 0 และ the QUADSPI ทำงานใน single data rate (SDR) mode.

ใน SDR mode, เมื่อ the QUADSPI กำลังขับ the IO0/SO, IO1, IO2, IO3 signals, การเปลี่ยนสัญญาณเหล่านี้จะเฉพาะกับขอบขาลงของ CLK.

เมื่อรับ data ใน SDR mode, the QUADSPI ทึกทักเอาว่า the Flash memories ส่ง the data โดยใช้ CLK's falling edge ด้วย. โดยค่าเริ่มต้น (เมื่อ SSHIFT = 0), the signals ถูกสุ่มโดยใช้ขอบที่ตามมา(ขอบขาขึ้น) ของ CLK.

tha

DDR mode

เมื่อ the DDRM bit (QUADSPI_CCR[31]) ถูกเซ็ตเป็น 1, the QUADSPI จะทำงานใน double data rate (DDR) mode.

ใน DDR mode, เมื่อ the QUADSPI กำลังขับ the IO0/SO, IO1, IO2, IO3 signals ใน the address/alternate-byte/data phases, a bit จะถูกส่งบนแต่ละของ the falling and rising edges ของ CLK.

The instruction phase ไม่ได้รับผลกระทบโดย DDRM. The instruction จะถูกส่งโดยใช้ CLK's falling edge เสมอ.

เมื่อรับ data ใน DDR mode, the QUADSPI ทึกทักเอาว่า the Flash memories ส่ง the data โดยใช้ทั้ง rising and falling CLK edges ด้วย. เมื่อ DDRM = 1, firmware ต้องเคลียร์ SSHIFT bit (bit 4 of QUADSPI_CR). ดังนั้น, the signals จะถูกสุ่มที่ครึ่งหนึ่งของ a CLK cycle ต่อมา (บนขอบที่ตามมา, ขอบที่ตรงกันข้าม).


tha

Dual-flash mode

เมื่อ the DFM bit (bit 6 of QUADSPI_CR) เป็น 1, the QUADSPI จะอยู่ใน dual-flash mode, โดยที่ two external quad SPI Flash memories (FLASH 1 and FLASH 2) ถูกใช้เพื่อส่ง/รับ 8 bits (หรือ 16 bits ใน DDR mode) ทุก cycle, เพิ่ม the throughput เป็นสองเท่าอย่างมีประสิทธิภาพเช่นเดียวกันกับ the capacity.

แต่ละของ the Flash memories ใช้ the same CLK และมีทางเลือกใช้ the same nCS signals, แต่แต่ละมี IO0, IO1, IO2, and IO3 signals แยกกัน.

Dual-flash mode สามารถถูกใช้ร่วมกันกับ single-bit, dual-bit, and quad-bit modes, เช่นเดียวกันกับร่วมกันกับ SDR หรือ DDR mode อย่างใดอย่างหนึ่ง.