​ 首先是UART.c上的错误,这个错误比较低级,由于将putc中的这个寄存器UFSTAT0写错了,还是写的以前那个没有开FIFO使用的寄存器,那也就导致了UART打印的字符乱码了,这个是根据源码一步一步找到的(替换文件,一个个来找),但是这个问题还不是最终需要解决的问题。

​ Nand.c是我一开始就怀疑的代码,因为这段代码是我自己写的,但是似乎没有什么明显的现象指到这里来,而且将串口打印加到main函数中去后,按键中断还出现了问题,这让我实在摸不清楚代码到底在哪出现了BUG,通过替换代码才从这些繁杂中找到一点头绪。

​ Nand.c有错误,那也只有一个地方的错误导致了串口打印的出错,那就是复制代码那个地方有问题。

2016-6-1 16:35:08

​ 问题的症结出现了,copy_to_ram分为了两步,① 将NF那2K前4页复制到DDR中;②将后续的那些8K的页复制到内存。 第一步没有问题,这也是小灯可以点亮,但是按键中断却没有啥反应或者是反应几下就没了,还有UART控制台显示不出来的原因了,代码都找不到,bootloader死在了重定位上。

​ 问题的出现也是自己粗心大意了。buf[i],i++,但是当i=0,重新循环时,buf地址并没有变化,也就造成了向一个重复内存里重复写数据的现象。

1
2
3
4
for(i=0; i < page; i++)
{
buff[i] = NFDATA;
}

解决方法:

① buff[i++] = NFDATA; 修改前面的代码,去掉for里面的i++。

② 修改buff[i] = NFDATA;为 *buff++ = NFDATA;