Could you please help to give some suggestions?
During DDR initialization, I set D_INIT and loop to polling this bit, it will be cleared. Does it mean that the DDR can be initialized by itself. But at this time, I only can access a little address space of DDR, I guess it is accessing cache, not really access DDR, since when I try to read a larger for example 4M address space of DDR, it will fail.
Yes, if D_INIT bit is set the DDR controller initializes the entire memory after MEM_EN=1. Any read of the "fresh" memory should return value written to the DDR_DATA_INIT register. If value is different or ECC errors happen, then something is wrong with either DDR SW or HW setup. The last can inculde problems with electrical parameters (like VDD or VTT or VREF voltages, etc) or PCB layout.