The Octal Serial Peripheral Interface (OSPI) module is a kind of Serial Peripheral Interface (SPI) module which allows single, dual, quad or octal read and write access to external flash devices. The OSPI module is used to transfer data, either in a memory mapped direct mode (for example a processor wishing to execute code directly from external flash memory), or in an indirect mode where the module is set-up to silently perform some requested operation, signaling its completion via interrupts or status registers.
The OSPI tuning algorithm works as follows:
Rx_DLL
▲
│ ++++++++++++++++
127 │ ++++++++++++++
│ x ++++++++++++
│ xx +++++++++++
│ xxx ++++++++++
│ xxxx +++++++++
│ xxxxx ++++++++
│ │ xxx│xx +++++++
│ │ xxx│xxx ++++++
│ │ xxx│xxxx +++++
│ │ xxx│xxxxx ++++
│ │ xxx│xxxxxx +++
Search │ │ xxx│xxxxxxx ++
Rx_Low ──┼─┤►xxx│xxxxxxxx +
│ │ │
─┼─┼────┼------────► Tx_DLL
0│ │ │ 127
│ │
│ │
Tx_Low Tx_Low
Start End
| Primary Search | Secondary Search | Final Point |
|---|---|---|
| Fail | Fail | Return Fail |
| Fail | Pass | Return Fail |
| Pass | Fail | Return Fail |
| Pass | Pass | RxDll = Min(Primary, Secondary) RdDelay = Min(Primary, Secondary) TxDll = Primary |
Rx_DLL
▲
127 │ ▲+++++++++++++++
Search │ │ ++++++++++++++
Rx_High────┼──►│ ++++++++++++
on Fixed │ │x +++++++++++
Tx_DLL │ │xx ++++++++++
│ │xxx +++++++++
│ │xxxx ++++++++
│ ▼xxxxx +++++++
│ Xxxxxxx ++++++
│ Xxxxxxxx +++++
│ Xxxxxxxxx ++++
│ Xxxxxxxxxx +++
│ Xxxxxxxxxxx ++
│ Xxxxxxxxxxxx +
│
─┼------------───► Tx_DLL
0│ 127
| Primary Search | Secondary Search | Final Point |
|---|---|---|
| Fail | Fail | Return Fail |
| Fail | Pass | Return Fail |
| Pass | Fail | Return Fail |
| Pass | Pass | If(secondary.rxDll > primary.rxDll) Pick Secondary search point Else Pick Primary search point |
Rx_DLL
▲
│ ++++++++++++++++
127 │ ++++++++++++++++
│ ++++++++++++++++
│ +++++++++++++++
│ +++++++++│++++│
│ ++++++++│++++│
│ x +++++++│++++│
│ xx ++++++│++++│
│ xxx +++++│++++│
│ xxxx ++++│++++│
│ xxxxx +++│++++│
│ xxxxxx ++│++++│
│ xxxxxxx +│++++│ Search
│ xxxxxxxx │++++◄─────── Rx_Low
│ │ │
─┼──────────────┼────┤► Tx_DLL
0│ │ │ 127
│ │
Tx_High Tx_High
Start End
Rx_DLL
127 ▲
│ +++++++++++++++▲ Search Rx_High
│ +++++++++++++++│◄──────────── on Fixed Tx_DLL
│ +++++++++++++++│
│ ++++++++++++++│
│ +++++++++++++│
│ ++++++++++++│
│ x +++++++++++▼
│ xx +++++++++++
│ xxx ++++++++++
│ xxxx +++++++++
│ xxxxx ++++++++
│ xxxxxx +++++++
│ xxxxxxx ++++++
│ xxxxxxxx ++++
│
─┼────────────────────► Tx_DLL
0│ 127
| Primary Search | Secondary Search | Final Point |
|---|---|---|
| Fail | Fail | Return Fail |
| Fail | Pass | Return Fail |
| Pass | Fail | Return Fail |
| Pass | Pass | If(secondary.rxDll > primary.rxDll) Pick Secondary search point Else Pick Primary search point |
Rx_DLL
127 ▲
│ ++++++++++++++++
Rx_High │ ++++++++++++++
───────┼──►x ++++++++++++
│ xx +++++++++++
│ xxx ++++++++++
│ xxxx +++++++++
Fix Rx_DLL │ xxxxx ++++++++
1/4 between │ xxxxxx +++++++
Rx_High and │ xxxxxxx ++++++
Rx_Low │ xxxxxxxx +++++
──────┼─► ◄───┬──► ++++
│ xxxx│xxxxx +++
Rx_Low │ xxxx│xxxxxx ++
──────┼──►xxxx│xxxxxxx +
│ │
─┼───────┼───────────► Tx_DLL
0│ │ 127
│
Search Tx_Low
Rx_DLL
127 ▲
│ +++++++++++++++++
Rx_High │ +++++++++++++++
───────┼──►x +++++++++++++
│ xx ++++++++++++
│ xxx +++++++++++
│ xxxx ++++++++++
Fix Rx_DLL │ xxxxx +++++++++
1/4 between │ xxxxxx ++++++++
Rx_High and │ xxxxxxx +++++++
Rx_Low │ xxxxxxxx ++++++
──────┼─► xxxxxxxxx ◄─┬─►
│ xxxxxxxxxx +│++
Rx_Low │ xxxxxxxxxxx │++
──────┼──►xxxxxxxxxxxx │++
│ │
─┼─────────────────┼─► Tx_DLL
0│ │127
Search Tx_Max
Rx_DLL
127 ▲
│
Rx_High──┼──►+++++++++++++++++
Fix Rx_DLL │ +++++++++++++++++
3/4 of │ +++++++++++++++++
Rx_High ─┼─► ◄───┬───►++++++++
and Rx_Low │ ++│++++++++++++
│ +│++++++++++++
│ x │++++++++++++
│ xx │++++++++++++
│ xxx │ +++++++++++
│ xxxx│ ++++++++++
│ xxxx│ +++++++++
│ xxxx│x ++++++++
│ xxxx│xx +++++++
Rx_Low──┼──►xxxx│xxx ++++++
│ │
─┼───────┼────────────► Tx_DLL
0│ │ 127
Search Tx_Min
Rx_DLL
127
▲
│
Rx_High──┼──►+++++++++++++++++
│ +++++++++++++++++
Fix Rx_DLL │ +++++++++++++++++
3/4 of ────┼─► +++++++◄────┬───►
Rx_High │ ++++++++++│++++
and │ +++++++++│++++
Rx_Low │ x ++++++++│++++
│ xx +++++++│++++
│ xxx ++++++│++++
│ xxxx +++++│++++
│ xxxxx ++++│++++
│ xxxxxx +++│++++
│ xxxxxxx ++│++++
Rx_Low──┼──►xxxxxxxx +│++++
│ │
─┼───────────────┼────► Tx_DLL
0│ │ 127
Search Tx_Max
Include the below file to access the APIs
Instance Open Example
Non-Blocking Example ISR Register
Non-Blocking Transfer Example
Instance Close Example