Program Page

Zynq UltraScale+ Device Technical Reference Manual (UG1085)

Document ID
UG1085
Release Date
2023-12-21
Revision
2.4 English
Table 25-11:      Program Page

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