This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
Hello,
I am developing on a F28388D ControlCard and have run into a slight issue using External Memory Interface1 (EMIF1). I have configured GPIO's 92-86, 52-38, and 94 as EM1A19-EM1A13, EM1A12-EM1A0, and EM1BA1 (respectively). I am using chip select 2 (CS2) and have configured it for 16-bit data (ASIZE=1) therefore these 21 address lines correspond to my systems A20-A0 address lines. I am performing two consecutive 16-bit writes to addresses 0x18 0001 and 0x20 0000 and am monitoring the CS2 and my A20, A19, and A0 address lines (3 address lines that I expect to be changing) on an oscilloscope. When I write to address 0x18 0001, I see CS2 go LOW, my A20 line go LOW (??), and my A19 and A0 lines go HI (all 3 address lines should go HI). When I write to address 0x20 0000, I see CS2 go LOW, my A20 line go HI (??), and my A19 and A0 lines go LOW (all 3 address lines should go LOW). My A20 line (GPIO92=EM1A19) acts as if it is either inverted or outputing the next higher (22nd or A21) address bit of the address I am writing to which I believe is not be available at a GPIO pin. I have looked at the GPCMUX2 Register and the GPPIO92 selection is set to 2 (0x10) which should be EM1A19 and the other MUX settings are correct for my other 19 address lines. What am I doing wrong? Am I not correctly understanding what should be happening on my A20 (GPIO92=EM1A19) line?
Thank you
Hi Danial,
Start address for this is from 0x10_0000 which translate to 0x00_0000 for EMIF address (offset). So you need to take only 21 address bits of this 22 address.
Hope this helps.
Regards,
Vivek Singh
Vivek,
Yes I agree that I can only use 21 address bits. So in your example, if I write to address location 0x10_0000 bit20 is a 1 so I would think I would get a 1 on the EMIF1_A19 line (my A20 line) but I get a 0. And conversely, if I write to address 0x20_0000 bit20 is a 0 so I would think I would get a 0 on the EMIF1_A19 line but I get a 1. If I were trying to write to an external 2Mx16 memory device, I would need to use EMIF1_A19 and would need it to be correct. What am I missing?
Thanks
Dan
Furthermore, in your example you say that address 0x10_0000 translates to 0x00_0000. That to me means that we can only do 20 bit external addressing since the 1 in the 21st address bit location (A20) gets changed to a 0. I would agree with you if you said address 0x20_0000 translates to 0x00_0000 since now the 1 is in the 22nd address bit location (A21).
Dan,
if I write to address location 0x10_0000 bit20 is a 1 so I would think I would get a 1 on the EMIF1_A19 line (my A20 line) but I get a 0.
0x10_0000 maps to address 00_0000 so you'll see all the address lines 0x0 for that. Basically 0x10_0000 is kind of base address. So for 0x20_0000 the address on EMIF would be 0x10_0000 (address - base_address).
Regards,
Vivek Singh