I am attempting to use nrfjprog to test my QSPI Flash. Here is the QSPI wiring connection:
| P0.24 | CS (chip select) |
| P0.19 | CLK (clock) |
| P0.21 | IO0 |
| P0.22 | IO1 |
| P0.23 | IO2 |
| P1.00 | IO3 |
Here is the command that I used for my test and I have attached the log file.
nrfjprog -f nrf52 --qspiini QspiDefault.ini --readqspi test.txt --log ERROR: [SeggerBackend] - JLinkARM.dll ReadMemU32 detected a read error 1. ERROR: [SeggerBackend] - This typically indicates the read was blocked by a memory protection mechanism. ERROR: [SeggerBackend] - JLinkARM.dll ReadMemU32 detected a read error 1. ERROR: [SeggerBackend] - This typically indicates the read was blocked by a memory protection mechanism. ERROR: [SeggerBackend] - JLinkARM.dll ReadMemU32 detected a read error 1. ERROR: [SeggerBackend] - This typically indicates the read was blocked by a memory protection mechanism. ERROR: [SeggerBackend] - JLinkARM.dll ReadMemU32 detected a read error 1. ERROR: [SeggerBackend] - This typically indicates the read was blocked by a memory protection mechanism. ERROR: [SeggerBackend] - JLinkARM.dll ReadMemU32 detected a read error 1. ERROR: [SeggerBackend] - This typically indicates the read was blocked by a memory protection mechanism. ERROR: nrfjprog failed for an unknown reason. Run the same command again with ERROR: argument --log, contact Nordic Semiconductor and provide the generated ERROR: log.log file to them.
And here is the QspiDefault.ini .
; nrfjprog QSPI configuration file. [DEFAULT_CONFIGURATION] ; Define the capacity of the flash memory device in bytes. Set to 0 if no external memory device is present in your board. MemSize = 0x400000 ; Define the desired ReadMode. Valid options are FASTREAD, READ2O, READ2IO, READ4O and READ4IO ReadMode = READ4IO ; Define the desired WriteMode. Valid options are PP, PP2O, PP4O and PP4IO WriteMode = PP4O ; Define the desired AddressMode. Valid options are BIT24 and BIT32 AddressMode = BIT24 ; Define the desired Frequency. Valid options are M2, M4, M8, M16 and M32 Frequency = M32 ; Define the desired SPI mode. Valid options are MODE0 and MODE3 SpiMode = MODE0 ; Define the desired SckDelay. Valid options are in the range 0 to 255 SckDelay = 0x01 ; Define SPI interface timing. Valid options are in the range of 0 to 7. ; This argument is only used for devices where the dll function NRFJPROG_qspi_set_rx_delay() is supported. RxDelay = 2 ; Define the desired IO level for DIO2 and DIO3 during a custom instruction. Valid options are LEVEL_HIGH and LEVEL_LOW CustomInstructionIO2Level = LEVEL_LOW CustomInstructionIO3Level = LEVEL_HIGH ; Define the assigned pins for the QSPI peripheral. Valid options are those existing in your device ; For nRF53, QSPI pins are not configurable and these values are ignored. CSNPin = 24 CSNPort = 0 SCKPin = 19 SCKPort = 0 DIO0Pin = 21 DIO0Port = 0 DIO1Pin = 22 DIO1Port = 0 DIO2Pin = 23 DIO2Port = 0 DIO3Pin = 0 DIO3Port = 1 ; Define the Index of the Write In Progress (WIP) bit in the status register. Valid options are in the range of 0 to 7. WIPIndex = 0 ; Define page size for commands. Valid sizes are PAGE256 and PAGE512. PPSize = PAGE256 ; Custom instructions to send to the external memory after initialization. Format is instruction code plus data to send in between optional brakets. ; These instructions will be executed each time the qspi peripheral is initiated by nrfjprog. ; To improve execution speed on consecutive interations with QSPI, you can run nrfjprog once with custom initialization, and then comment out the lines below. ; Numbers can be given in decimal, hex (starting with either 0x or 0X) and binary (starting with either 0b or 0B) formats. ; The custom instructions will be executed in the order found. InitializationCustomInstruction = 0x06 InitializationCustomInstruction = 0x31, [0x02]0830.log.log
Thank you for any advice and recommendations.