24BPP bootloader读取NAND中LOGO,图像杂乱

yangfenyan 2014-02-08 06:01:55
BOOTLOADER 中 从 NANDFLASH 读取LOGO RGB888的纯数据,显示,下面代码可有问题?我死活看不出问题了,但是图像显示完全是乱的。
LOGO存放在第10个BLOCK,每个BLOCK 32个page
图片大小 320*240*3

(LCD中显示RGB三条RGB色块无问题)后
LcdAddrPointer=(U32*)IMAGE_FRAMEBUFFER_DMA_BASE;
//logoBuffer = IMAGE_FRAMEBUFFER_DMA_BASE;


dwSector =10<<5;
dwLength = 450;

while (dwLength)
{

if(!NF_ReadSector(dwSector, (unsigned char*)Buf512))
{
//Uart_SendString("\nBAD! : ");
//Uart_SendDWORD((DWORD)dwSector);
}

for(i=0;i<512;i=i+3)
{
*LcdAddrPointer++=(t32_0=Buf512[i])|((t32_1=Buf512[i+1])<<8)|((t32_2=Buf512[i+2])<<16);
}
temp1=Buf512[510];
temp2=Buf512[511];

if(!NF_ReadSector(dwSector, (unsigned char*)Buf512))
{
//Uart_SendString("\nBAD! : ");
//Uart_SendDWORD((DWORD)dwSector);
}
temp0=Buf512[0];
*LcdAddrPointer++=temp1|(temp2<<8)|(temp0<<16);
for(i=0;i<512;i=i+3)
{
*LcdAddrPointer++=(t32_0=Buf512[i])|((t32_1=Buf512[i+1])<<8)|((t32_2=Buf512[i+2])<<16);
}
temp2=Buf512[511];
if(!NF_ReadSector(dwSector, (unsigned char*)Buf512))
{
//Uart_SendString("\nBAD! : ");
//Uart_SendDWORD((DWORD)dwSector);
}
*LcdAddrPointer++=temp2|((t32_0=Buf512[0])<<8)|((t32_1=Buf512[1])<<16);
for(i=0;i<512;i=i+3)
{
*LcdAddrPointer++=(t32_0=Buf512[i+2])|((t32_1=Buf512[i+3])<<8)|((t32_1=Buf512[i+4])<<16);
}

dwSector=dwSector+3;
dwLength=dwLength-3;
}
...全文
596 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
saleslhzk12345 2014-04-05
  • 打赏
  • 举报
回复
前段时间,我刚做过这个内容,裸机程序显示320*240*24位的图片,2440上面。如果开了MMU,显示缓冲区地址有两个:实地址和虚地址,裸面程序要用实地址,2440不支持显存虚地址(我目前的感觉)。至于210,没试过。 楼主的问题如果解决了,麻烦分享下经验。
yangfenyan 2014-02-17
  • 打赏
  • 举报
回复
引用 10 楼 cclutpk 的回复:
如果图像可以正常显示,只是颜色失真,应该是你的RGB顺序乱了
你指读取数据时?看了,读取顺序没错。
yangfenyan 2014-02-17
  • 打赏
  • 举报
回复
直接用HJTAG 烧写到NAND中的
zzyliuhua 2014-02-15
  • 打赏
  • 举报
回复
请问你是怎么把图片写到flash的?
cclutpk 2014-02-10
  • 打赏
  • 举报
回复
如果图像可以正常显示,只是颜色失真,应该是你的RGB顺序乱了
  • 打赏
  • 举报
回复
另外根据你的代码,你要确认你的lcd驱动配置的是32bit才行。如果是16bit那也会错误的。
  • 打赏
  • 举报
回复
1.不读取NANDFLASH,而是将数据放在内存中,试试你的显示是否正确。 2.读取NANDFLASH 中的数据然后比较原始数据,看看是否正确。 并不需要比较太多的东西,基本上几行就能知道效果了。先确认问题出在哪里,这样才比较好改。
gooogleman 2014-02-09
  • 打赏
  • 举报
回复
1、转换的要转成32bit 的才行,如果你转成16bit 的,会乱 2、自己显示部分不太对,不过你上面貌似是现成的,应该可以。 我在S5pv210 显示的就是24bit 的,不过我用uboot+eMMC 来做,eboot 没做了。
yangfenyan 2014-02-09
  • 打赏
  • 举报
回复
更正下,显示单色均无问题,比方红绿蓝,橙、紫等等,复杂色彩图片则颜色失真
yangfenyan 2014-02-09
  • 打赏
  • 举报
回复
读取纯色图片等都没有问题了,比方从NAND中读取RGB三条色带的BIN文件后显示,没问题。 但显示合成色后有问题
yangfenyan 2014-02-09
  • 打赏
  • 举报
回复
修改后,显示纯红色没问题了。但显示图像还是花的,这可能是什么问题导致的呢?GAMMA值会影响么? Memset((void *)(IMAGE_FRAMEBUFFER_DMA_BASE), 0x00, 307200); LcdAddrPointer=(U32*)IMAGE_FRAMEBUFFER_DMA_BASE; //logoBuffer = IMAGE_FRAMEBUFFER_DMA_BASE; dwSector =10<<5; dwLength = 450; while (dwLength) { if(!NF_ReadSector(dwSector,(unsigned char*)Buf512)) { // Uart_SendString("\nBAD! : "); //Uart_SendDWORD((DWORD)dwSector); } for(i=0;i<170;i++) { *LcdAddrPointer=(t32_0=Buf512[3*i])|((t32_1=Buf512[3*i+1])<<8)|((t32_2=Buf512[3*i+2])<<16); LcdAddrPointer=LcdAddrPointer+1; } temp1=Buf512[510]; temp2=Buf512[511]; if(!NF_ReadSector(dwSector+1, (unsigned char*)Buf512)) { //Uart_SendString("\nBAD! : "); //Uart_SendDWORD((DWORD)dwSector); } temp0=Buf512[0]; *LcdAddrPointer=temp1|(temp2<<8)|(temp0<<16); LcdAddrPointer=LcdAddrPointer+1; for(i=0;i<170;i++) { *LcdAddrPointer=(t32_0=Buf512[3*i+1])|((t32_1=Buf512[3*i+2])<<8)|((t32_2=Buf512[3*i+3])<<16); LcdAddrPointer=LcdAddrPointer+1; } temp2=Buf512[511]; if(!NF_ReadSector(dwSector+2, (unsigned char*)Buf512)) { //Uart_SendString("\nBAD! : "); //Uart_SendDWORD((DWORD)dwSector); } *LcdAddrPointer=temp2|((t32_0=Buf512[0])<<8)|((t32_1=Buf512[1])<<16); LcdAddrPointer=LcdAddrPointer+1; for(i=0;i<170;i++) { *LcdAddrPointer=(t32_0=Buf512[3*i+2])|((t32_1=Buf512[3*i+3])<<8)|((t32_1=Buf512[3*i+4])<<16); LcdAddrPointer=LcdAddrPointer+1; } dwSector=dwSector+3; dwLength=dwLength-3; }
cclutpk 2014-02-09
  • 打赏
  • 举报
回复
为什么不一次读出3个sector放到一个buffer,省的你分3次来读还要把buffer拼来拼去的,看的绕人
cclutpk 2014-02-09
  • 打赏
  • 举报
回复
这代码看的有点糟心
色郎中 2014-02-08
  • 打赏
  • 举报
回复
有几种可能 1 原始数据是错误的 2 原始数据是对的,但是你取乱了

19,520

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧