T
TK128
Unregistered / Unconfirmed
GUEST, unregistred user!
环境:Net-Start开发板,uClinux 2.0,AM29LV160DB Flash,在uCLinux启动后建立了
一个1M的RamDisk,文件系统用的是Ext2
要实现的功能:编制一程序在uClinux 2.0下执行,打印出Flash厂家代码和设备代码
背景资料: AM29LV160DB Flash通过CFI可执行擦除、写入、查询等操作,具体过程如下:
1. 向<基地址>+0x555写入 0xAA (Word模式)
2. 向<基地址>+0x2AA写入 0x55 (Word模式)
3. 向<基地址>+0x555写入 0x90
4. 读取<基地址>第一个字节得到制造商代码
5. 向<基地址>+0x555写入 0xF0可复位Flash进入只读模式
这个程序是读写Flash的 'Hello World',因此选择这样方式来熟悉
Flash的编程
程序:
#include <stdio.h>
int main(void)
{
short *BaseAddress=(short *)0x1800000;
BaseAddress[0x555]=0xAA;
BaseAddress[0x2AA]=0x55;
printf("Code=%d",*BaseAddress);
BaseAddress[0x555]=0xF0;
}
问题:
该程序在仿真器内运行正确,得到Flash制造商代码为01=AMD,
设备代码为:0x2249表示Flash是AMLV160B型Flash,但该程序在Linux环境
下编译,产生执行文件后将执行文件下载到开发板运行于uClinux 2.0下
后得到的设备代码为不正确的信息,本人估计和uClinux系统有关系,但
uClinux的参考资料上都介绍uClinux没有内存管理模块,输出地址直接出现
在总线上,不应该出现这种问题才对,但现在都找不着北了,请写过Flash
烧录程序的朋友指点。
一个1M的RamDisk,文件系统用的是Ext2
要实现的功能:编制一程序在uClinux 2.0下执行,打印出Flash厂家代码和设备代码
背景资料: AM29LV160DB Flash通过CFI可执行擦除、写入、查询等操作,具体过程如下:
1. 向<基地址>+0x555写入 0xAA (Word模式)
2. 向<基地址>+0x2AA写入 0x55 (Word模式)
3. 向<基地址>+0x555写入 0x90
4. 读取<基地址>第一个字节得到制造商代码
5. 向<基地址>+0x555写入 0xF0可复位Flash进入只读模式
这个程序是读写Flash的 'Hello World',因此选择这样方式来熟悉
Flash的编程
程序:
#include <stdio.h>
int main(void)
{
short *BaseAddress=(short *)0x1800000;
BaseAddress[0x555]=0xAA;
BaseAddress[0x2AA]=0x55;
printf("Code=%d",*BaseAddress);
BaseAddress[0x555]=0xF0;
}
问题:
该程序在仿真器内运行正确,得到Flash制造商代码为01=AMD,
设备代码为:0x2249表示Flash是AMLV160B型Flash,但该程序在Linux环境
下编译,产生执行文件后将执行文件下载到开发板运行于uClinux 2.0下
后得到的设备代码为不正确的信息,本人估计和uClinux系统有关系,但
uClinux的参考资料上都介绍uClinux没有内存管理模块,输出地址直接出现
在总线上,不应该出现这种问题才对,但现在都找不着北了,请写过Flash
烧录程序的朋友指点。