Hello to all,
I am trying to figure out the variation in current consumption as well as in clock cycles due to different memory regions and different offsets. During various experiments, I have found the following results:
LDR R4,[R1,#0x0] (R1 = 0x00000000 (Flash) with 0 offset) : Current = 2.60mAmps & Cycles = 2
LDR R4,[R1,#0x1] (R1 = 0x00000000 (Flash) with 1 offset) : Current = 2.07mAmps & Cycles = 4
LDR R4,[R1,#0x2] (R1 = 0x00000000 (Flash) with 2 offset) : Current = 2.30mAmps & Cycles = 3
LDR R4,[R1,#0x3] (R1 = 0x00000000 (Flash) with 3 offset) : Current = 2.08mAmps & Cycles = 4
from offset 4 it repeats the order. I mean Offset = 4 is equal to Offset = 0 ; Offset = 5 is equal to Offset = 1 ; Offset = 6 is equal to Offset = 2 ; Offset = 7 is equal to Offset = 3 ; Offset = 8 is equal to Offset = 0 and so on....
Similarly, while access SRAMX also :
LDR R4,[R1,#0x0] (R1 = 0x04000000 (Flash) with 0 offset) : Current = 2.88mAmps & Cycles = 1
LDR R4,[R1,#0x1] (R1 = 0x04000000 (Flash) with 1 offset) : Current = 2.30mAmps & Cycles = 3
LDR R4,[R1,#0x2] (R1 = 0x04000000 (Flash) with 2 offset) : Current = 2.65mAmps & Cycles = 2
LDR R4,[R1,#0x3] (R1 = 0x04000000 (Flash) with 3 offset) : Current = 2.29mAmps & Cycles = 3
On the basis of observation, I have three questions:
Kindly help me out with this. I am using LPCXpresso 54114 board, with ARM Cortex-M4 processor. And all the measurement have been taken at 12MHz.
Thanking you,
Regards,
Himanshu
Hi Himanshu,
1) That is done by the processor hardware automatically.
The bus interface is 32-bit, and support 32-bit, 16-bit and 8-bit transfers.
The memory (conceptually) is designed to be 32-bit wide, with 4 byte lanes. Assume that it is little endian, the memory look like the following to the processor:
...
Byte[0xB], Byte[0xA], Byte[9], Byte[8].
Byte[7], Byte[6], Byte[5], Byte[4].
Byte[3], Byte[2], Byte[1], Byte[0].
The addresses for each byte lane are identically, so each memory access can only access to the bytes in the same row, and the transfer sizes can only be 8/16/32 bit to satisfy the AHB protocol.
When the processor bus interface detected that you have a word size transfer to 0x00000001, the bytes need to be accessed are byte[1], byte[2], byte[3], and byte[4]
The bus transfers generated would be:
- Byte[1] - 8-bit transfer to 0x00000001
- Byte[3] and byte[2] - 16-bit transfer to bytes 0x00000003 and 0x00000002
- Byte[4] - 8-bit transfer to 0x00000004
When the processor bus interface detected that you have a word size transfer to 0x00000003, the bytes need to be accessed are byte[3], byte[4], byte[5], and byte[6]
- Byte[3] - 8-bit transfer to 0x00000003
- Byte[5] and byte[4] - 16-bit transfer to bytes 0x00000005 and 0x00000004
- Byte[6] - 8-bit transfer to 0x00000006
When the processor bus interface detected that you have a word size transfer to 0x00000002, the bytes need to be accessed are byte[2], byte[3], byte[4], and byte[5]
Hope this is clearer.
regards,
Joseph
Dear Mr. Yiu,
Thank you ve much for such deep explanation. I am really thankful to you since the information was nowhere provided in detail and due to example now it is It is more clear to me. Your investment in time and energy was far beyond what I could have asked for.
Warm Regards,