[U-Boot-Users] Using at91 with a different parallel flash, request for help

Jerry Van Baren gerald.vanbaren at smiths-aerospace.com
Tue Jun 13 18:49:46 CEST 2006


A: We hate "JEOPARDY! America's Favorite Quiz Show(R)."
Q: Why should I not top-post?

Your hardware is configured for little endian or big endian.  That is a 
hardware issue and it is your hardware, not ours, so it is your issue. 
Your driver is apparently writing "wrong endian."  That is a software 
bug.  It is almost always better to fix your software than try to change 
the endian of your hardware.

I'm not familiar with the at91 (ARM) CPU, but typically changing endian 
is either impossible or causes major problems if you pick the "wrong" 
endianness.  Steps:
1) Find your CPU's reference manual(s) and see what it supports (it 
appears to be little endian)
2) Pick the native/best supported endianess
    - Since u-boot runs, it implies that whatever your flash programmer
     uses is "right endian".  Conform, it is your only hope.
3) Make sure your hardware is configured for that endianess (assuming it 
is configurable)
    - Since u-boot runs, this should be OK
4) Make sure your software writes bytes in the correct endian
    - This is your bug Wolfgang refers to below.  Fix it.

Hardware designers have been known to do us software jocks "favors" when 
hooking up flash chips, resulting in the control byte being in an 
unconventional byte location (e.g. big endian in a little endian world 
or vice versa).  That is no big deal, your flash driver can handle this 
(easiest is to treat all the bytes as control/status when in programming 
mode) and the processor really doesn't care one whit when it is 
executing, as long as you wrote the data bytes in the "right endian" 
(which is exactly your problem).

gvb

P.S. Netiquette links on (not) top posting:
http://www.netmeister.org/news/learn2quote2.html#ss2.3
http://www.netmeister.org/news/learn2quote.html

Roman Kolesnikov wrote:
> Hello everyone,
> I have been testing my driver, and I ofund that my driver writes litttle 
> endian. I have not found so far, how I can set UBoot to read little 
> endian from the flash. However, that is the trouble in my case. This is 
> also the reason why I can load Uboot from flash, but nothing past uboot 
> can be retrieved or saved without any corruption.
> 
> I am not sure, where I can find more information about the little-endian 
> or big-endian settings. Please advice,
> 
> Thanks in advance,
> Roman
> 
> 
> Wolfgang Denk wrote:
> 
>> In message <448E475F.90705 at randrlabs.com> you wrote:
>>  
>>
>>> I copy uboot 1.1.4(low level present) into flash at 10000000
>>> I reset with external boot juped
>>> uboot 1.1.4 loads fine
>>> I saveenv
>>> I reboot
>>> I get errors about crc and stdin,out and error
>>> I do printenv, I get 65K of .
>>> At this point I see that my env variables are corrupted.
>>>    
>>>
>> So either the configuration in your board config file is  wrong,  and
>> does  not match the layout of your image, and/or your flash driver is
>> broken.
>>
>>  
>>
>>> Somehow my data is corrupted. But why and how does the original uboot 
>>> saved to flash is loading fine?
>>>    
>>>
>> So probably your flash driver is broken.
>>
>> Best regards,
>>
>> Wolfgang Denk





More information about the U-Boot mailing list