Skip to content

Commit 60e0ef6

Browse files
committed
stm32/octospi: Add support for dual-line SPI interface.
And fix the case of 32-bit addresses in single-line mode. Signed-off-by: Damien George <[email protected]>
1 parent ee5e594 commit 60e0ef6

File tree

1 file changed

+21
-1
lines changed

1 file changed

+21
-1
lines changed

ports/stm32/octospi.c

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -272,16 +272,36 @@ STATIC int octospi_read_cmd(void *self_in, uint8_t cmd, size_t len, uint32_t *de
272272
STATIC int octospi_read_cmd_qaddr_qdata(void *self_in, uint8_t cmd, uint32_t addr, size_t len, uint8_t *dest) {
273273
(void)self_in;
274274

275+
#if defined(MICROPY_HW_OSPIFLASH_IO1) && !defined(MICROPY_HW_OSPIFLASH_IO2) && !defined(MICROPY_HW_OSPIFLASH_IO4)
276+
277+
// Use 2-line address, 2-line data.
278+
279+
uint32_t adsize = MICROPY_HW_SPI_ADDR_IS_32BIT(addr) ? 3 : 2;
280+
uint32_t dmode = 2; // data on 2-lines
281+
uint32_t admode = 2; // address on 2-lines
282+
uint32_t dcyc = 4; // 4 dummy cycles
283+
284+
if (cmd == 0xeb || cmd == 0xec) {
285+
// Convert to 2-line command.
286+
cmd = MICROPY_HW_SPI_ADDR_IS_32BIT(addr) ? 0xbc : 0xbb;
287+
}
288+
289+
#else
290+
291+
// Fallback to use 1-line address, 1-line data.
292+
275293
uint32_t adsize = MICROPY_HW_SPI_ADDR_IS_32BIT(addr) ? 3 : 2;
276294
uint32_t dmode = 1; // data on 1-line
277295
uint32_t admode = 1; // address on 1-line
278296
uint32_t dcyc = 0; // 0 dummy cycles
279297

280-
if (cmd == 0xeb) {
298+
if (cmd == 0xeb || cmd == 0xec) {
281299
// Convert to 1-line command.
282300
cmd = MICROPY_HW_SPI_ADDR_IS_32BIT(addr) ? 0x13 : 0x03;
283301
}
284302

303+
#endif
304+
285305
OCTOSPI1->FCR = OCTOSPI_FCR_CTCF; // clear TC flag
286306

287307
OCTOSPI1->DLR = len - 1; // number of bytes to read

0 commit comments

Comments
 (0)