Task
|
Register
|
Register Field
|
Register Offset
|
Bits
|
Value (Binary)
|
Program command for page programming (0x1080) with ECC, DMA enabled.
|
Command_Register
|
All
|
0x0C
|
31:0
|
Program the command with required address cycles.
|
If DMA is enabled, enable DMA boundary interrupt.
|
Interrupt_Status_Enable_Register
|
dma_int_sts_en | trans_comp_sts_en
|
0x014
|
6 and 2
|
0x44 (hex)
|
Else enable buffer write ready interrupt.
|
Interrupt_Status_Enable_Register
|
buff_wr_rdy_sts_en
|
0x014
|
0
|
1b'1
|
Set page size.
|
Command_Register
|
page_size
|
0x0C
|
25:23
|
3'd0: 512B
3'd1: 2 KB
3'd2: 4 KB
3'd3: 8 KB
3'd4: 16 KB
3'd5: 1 KB 0x16 bit flash support
6-7 - RES
|
Select packet size and count.
|
Packet_Register
|
Packet_count | packet_size
|
0x00
|
23:0
|
Required packet size and count.
|
If DMA enabled, program DMA system address and buffer boundary (following three steps).
|
Invalidate the data cache.
|
For 64-bit architecture, program higher address word.
|
DMA_system_address1_register
|
DMA_system_ address1_register
|
0x024
|
31:0
|
Program higher address word.
|
Program lower address word.
|
DMA_system_address0_register
|
DMA_system_ address0_register
|
0x50
|
31:0
|
Program lower address word.
|
Program column, page, and block address (next two steps).
|
Program memory address register 1.
|
Memory_Address_Register1
|
All
|
0x04
|
31:0
|
•Program block address in bits 31:25.
•Program page address in bits 22:16.
•Program column address in bits 12:0.
|
Program memory address register 2.
|
Memory_Address_Register2
|
All
|
0x008
|
31:0
|
Write required values for memory address.
|
Select the device.
|
Memory_Address_Register2
|
Chip_Select
|
0x08
|
31:30
|
Targets chip select value.
|
Set ECC spare command (0X85) if hardware ECC enabled.
|
ECC_Spare_Command_Register
|
Number_of_ECC_ and_Spare_Address_cycles | ECC_Spare_cmd
|
0x3c
|
30:0
|
0X85 for spare command and required address cycles.
|
Set page program in program register.
|
Program_Register
|
Page_Program
|
0x10
|
4
|
1b'1
|
For non-DMA mode, perform following steps until all packets received (next six steps).
|
Poll for buffer write ready event.
|
Interrupt_Status_Register
|
buff_wr_rdy_reg
|
0x1C
|
0
|
Wait until bit is set or wait time is over.
|
If buffer write ready events are equal to packet count, then enable the transmit complete interrupt after transfer completed.
|
Interrupt_Status_Enable_Register
|
trans_comp_sts_en
|
0x014
|
2
|
1b'1
|
Else, clear buffer write ready interrupt in status enable register.
|
Interrupt_Status_Register
|
buff_wr_rdy_sts_en
|
0x14
|
0
|
1b'0
|
Clear buffer write ready interrupt.
|
Interrupt_Status_Register
|
buff_wr_rdy_reg
|
0x1C
|
0
|
1b'1
|
Write packet data.
|
Buffer_Data_Port_Register
|
Data_Port_Register
|
0x030
|
31:0
|
Write until all data over.
|
If buffer write ready events are less than packet count, then enable buffer write ready interrupts and start next iteration else break the loop here.
|
Interrupt_Status_Enable_Register
|
buff_wr_rdy_sts_en
|
0x014
|
0
|
1b'1
|
Poll for transfer complete event.
|
Interrupt_Status_Register
|
trans_comp_reg
|
0x1C
|
2
|
Wait until transfer is completed or wait time is over.
|
Clear the transmit complete interrupt after transfer completed.
|
Interrupt_Status_Enable_Register
|
trans_comp_sts_en
|
0x014
|
2
|
1b'0
|
Clear the transmit complete flag after transfer completed.
|
Interrupt_Status_Register
|
trans_comp_reg
|
0x1C
|
2
|
1b'1
|