这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » uCLinux下写flash的问题

共9条 1/1 1 跳转至

uCLinux下写flash的问题

菜鸟
2005-09-15 23:11:31     打赏

s3c4510b+uclinux+am29lv160db

bootloader将flash重映射到0x1000000,并load image到0x8000后启动uC.

现在的情况是uC正常,在uC下读flash正常,但是无法写或删除flash数据

一旦执行unlock: *(volatile unsigned short *)(FM_START_ADDR + 0x555)=0xaaaa系统就崩溃了。更谈不上删除或写操作。

请问这是什么原因?uC采用blkmem类型的block dev 驱动。




关键词: uCLinux     下写     flash     问题    

菜鸟
2005-09-15 23:45:00     打赏
2楼
就是flash重映射后的基地址0x1000000

菜鸟
2005-09-15 23:56:00     打赏
3楼

用 *(volatile unsigned short *)(FM_START_ADDR + addr)读flash可以正确执行。

所以应该不会是地址错误,会不会是uC的限制?


菜鸟
2005-09-15 23:58:00     打赏
4楼

romfs.

我是自己写了一个程序想修改flash某几个sector的数据。


菜鸟
2005-09-16 00:00:00     打赏
5楼

这是错误信息,自己分析得不是很清楚

/> ipcset -m
Internal error: unknown data abort code: e1c310b0
CPU: 0
pc : [<00000001>] lr : [<007fa060>] Not tainted
sp : 00000060 ip : 00177ea8 fp : 00177ea8
r10: fffffeff r9 : fff7ffff r8 : ffffffff
r7 : ffffffff r6 : ffffffff r5 : fffffaff r4 : ffffffff
r3 : ffffffff r2 : ffffffff r1 : 80000010 r0 : 007904d0
Flags: nzcv IRQs on FIQs on Mode FIQ_26 Segment kernel
Control: 0
Process ipcset (pid: 16, stackpage=007f9000)
Stack:
Backtrace: frame pointer underflow
Function entered at [<007fa010>] from [<001f6000>]
Function entered at [<00177e88>] from [<00000000>]


菜鸟
2005-09-16 03:14:00     打赏
6楼

是的

在bootloader里用memomove()把整个uC映像都copy到ram里去了.


菜鸟
2005-09-16 06:31:00     打赏
7楼
我对错误信息的理解也很模糊:
1.肯定是产生硬件异常了,这个异常应该是Data abort("unknown data abort "),从traps.c可以找到依据。但是Mode却是FIQ_26,而不是ABT_xx,这个...还没弄懂;

2. 为什么会产生这个异常? 按照我的想法,运行在SDRAM中的uC没有读写flash操作,所以应用程序删除或写flash不会冲突;

3. 产生数据中止( dataabort)异常意味着对存储器的数据访问失败,造成这个失败的原因是理解这个问题的关键,可惜我现在还不明白。

菜鸟
2005-09-17 01:12:00     打赏
8楼

的确是这样,我把地址搞错了。

应该是0x555<<1=0xAAA。

但是程序运行还是有问题:

现在只能执行第一个fm_write(),然后就死机了。

void send_unlock()
{
fm_write(FM_ADDR_UNLOCK1,FM_DATA_UNLOCK1);
dbg("1st unlock\n");
fm_write(FM_ADDR_UNLOCK2,FM_DATA_UNLOCK2);
dbg("2nd unlock\n");
}

执行完后只显示 1s 就死机了 :(


菜鸟
2005-09-17 01:13:00     打赏
9楼

fm_write是这样定义的

#define fm_write(addr, data) VPshort(FM_START_ADDR + addr) = data

FM_ADDR_UNLOCK1=0xAAA

FM_ADDR_UNLOCK2=0x555


共9条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]