Content originally posted in LPCWare by PhilYoung on Tue Jun 12 10:59:50 MST 2012
Hi Thomas.
the address bus from the CPU is a byte address bus, so for 32 bit accesses the word address is A31..A2, for 16 bit it's A31..A1, and A31..A0 for 8 bits.
( by Word address I refer here to the memory word size, which is 32,16, and8 bits in the 3 modes respectively ).
ignore the pin naming on the device, just use the CPU addresses.
the memory is 16 bits wide, so A31..A1 addresses memory words, depending on the memory size
with collumn address length of 9, 4 banks, row lenbgth of 12 that uses the following signals.
for BRC
BS = A23..A22, row address = A21..A10, collum Address = A9..A1
for RBC
row address = A23..A12, BS = A11..A10, collum Address = A9..A1
The fact that both Row and Collumn address are output from the chip using An..A0 is irrelevant, the address is internally multiplized according to the SDRAM size.
Mode in the SDRAM is loaded from the Row Address, so <<10 for BRC, and <<12 for RBC
If you have a memory hole it suggests that the memory controller is configured for the wrong sized memory, i.e. for 1 extra row address bit. The error occurs when A22 is high.
This would also be consistent with incorrect connection of the BS0 / BS1 signals to the SDRAM.
regards
Phil.