On 10/28/07, <b class="gmail_sendername">Ramasamy C</b> &lt;<a href="mailto:thedavinci@gmail.com">thedavinci@gmail.com</a>&gt; wrote:<div><span class="gmail_quote"></span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<br><br>Paul Thomas-12 wrote:<br>&gt;<br>&gt; I can&#39;t seem to get the CP command to work at all. I want to test it by<br>&gt; doing a simple SDRAM copy. I know the SDRAM works and I know where it is<br>&gt; because I can use tftp to load a kernel image, and then boot the kernel
<br>&gt; from<br>&gt; RAM. I am using the linuxstamp &lt;<a href="http://opencircuits.com/Linuxstamp">http://opencircuits.com/Linuxstamp</a>&gt; which<br>&gt; is<br>&gt; based on atmel&#39;s at91rm9200. The main version I have been using is a
<br>&gt; patched<br>&gt; version of 1.1.6. I have also tried 1.3.0-rc3. Both versions have the same<br>&gt; result. If I do<br>&gt;&gt; tftpboot 20100000 uImage<br>&gt; This works. If I do<br>&gt;&gt; md 20000000<br>&gt; or
<br>&gt;&gt; md 20001000<br>&gt; It works, but if I do<br>&gt;&gt; cp 20000000 20001000 256<br>&gt; I get the error<br>&gt; &quot;Copy to Flash... General Flash Programming Error&quot;<br>&gt; Why does it think this is a flash operation? I am using RAM addresses. If
<br>&gt; I<br>&gt; do<br>&gt;&gt; protect off all<br>&gt; It doesn&#39;t change anything<br>&gt;<br>&gt; I feel like I don&#39;t understand something important about how CP works.<br>&gt; Please help.<br>&gt;<br>&gt; thanks,
<br>&gt; Paul<br>&gt;<br><br>&gt;From your board definitions if i understand, the CFG_FLASH_BASE is at<br>0x10000000 for 2 Megs. Please check with &quot;flinfo&quot; command to see if the<br>sectors are listed out correctly. The problem seems to be that the address
<br>20001000 in &quot;cp&quot; command is detected in the flash region. In case if it is<br>in the RAM region, it should be copied.<br><br>Moreover, direct tftp to flash region is possible. So, we cannot conclude<br>from tftp that the address is in RAM region.
<br></blockquote></div><br>The board configurations looks ok. But the &#39;Copy to Flash&#39; message would
print if and only if the destination address is in flash area and not
in dataflash area. The &#39;memcpy&#39; is a function that can be used within
u-boot. It is not available as a command in u-boot.<br>
<br>
Please cross check with the flash configuration options. In case if you use a Dataflash and disable normal flash, how are you
disabling the flash options? If
you have access to the u-boot code for modification, check in
board/at91rm9200dk/flash.c: You could see an array definition
&#39;flash_info&#39; being used throughout. So, the size values/start addressess are kept at 0 in case of a disabled flash. The function &#39;addr2info&#39; which is in common/flash.c would check for addresses in the limit: start_address and (start_address + size - 1) which being unsigned would be 0xffffffff and would detect it in the flash region.
<br><br>To cross check this scenario: Try copying to some other area in the memory. It should again be detected in the flash. Moreover &#39;cp&#39; should detect &#39;copy to flash&#39; for any area. To my understanding, i guess this would be a possible scenario.
<br><br>Quote from board/at91rm9200dk/flash.c:<br>void flash_identification (flash_info_t * info)<br>{<br>...<br>&nbsp;&nbsp;&nbsp; /* Vendor type */<br>&nbsp;&nbsp;&nbsp; info-&gt;flash_id = ATM_MANUFACT &amp; FLASH_VENDMASK;<br>&nbsp;&nbsp;&nbsp; printf (&quot;Atmel: &quot;);
<br>...<br>}<br><br>The vendor type for flash has been directly assigned. This should not be generally done. Check for device ID or some tag bits from the flash and depending on the type detected, assign this ID. The flash_id is one of the keyfield used in the &#39;addr2info&#39; function which is inturn used by many other functions.
<br><br>