Forums

无法写入闪存

开始于 弗雷德里克 2007年7月12日
大家好,

在程序中存储用户数据时遇到问题
闪存。
我使用普通代码:

mc->MC_FCR = AT91C_MC_WRITE_KEY | AT91C_MC_FCMD_START_PROG | (页<< 8);

低于0x100000的写入工作正常,在此地址及更高地址处,
处理器崩溃。

我尝试过的各种SAM7模型似乎都出现了问题。

任何的想法?这是映射问题吗?

谢谢
弗雷德里克写道:
> Hi all,
>
>在程序中存储用户数据时遇到问题
> flash memory.
>
>我使用普通代码:
>
> mc->MC_FCR = AT91C_MC_WRITE_KEY | AT91C_MC_FCMD_START_PROG | (页<< 8);
>
>低于0x100000的写入工作正常,在此地址及更高地址处,
> processor crashes.
>
>我尝试过的各种SAM7模型似乎都出现了问题。
>

您正在使用哪个SAM7?
SAM7XC256和SAM7S256会出现此问题。

闪存为0x40000字节[%6kB],并映射到0x100000,即 范围= 0x100000至0x13FFFF。

请注意,我没有尝试覆盖任何代码。我是
实际上试图写入0x13FF00,这不是
用过的。

卡加拉·阿奎兹(Caglar Akyuz)写道:
> Hi all,
>
>在程序中存储用户数据时遇到问题
> flash memory.
>
>我使用普通代码:
>
> mc->MC_FCR = AT91C_MC_WRITE_KEY | AT91C_MC_FCMD_START_PROG | (页<< 8);
>
>低于0x100000的写入工作正常,在此地址及更高地址处,
> processor crashes.
>
>我尝试过的各种SAM7模型似乎都出现了问题。
>

您正在使用哪个SAM7?

雅虎!群组连结
弗雷德里克写道:
>SAM7XC256和SAM7S256会出现此问题。
>
>闪存为0x40000字节[%6kB],并映射到0x100000,即 范围= 0x100000至0x13FFFF。
>

我正在使用SAM7X256并成功写入地址0x0013FF00。那里
是1024页,并且您正在成功写入512以下的页面。是吗
在计算页面时可能会犯一些错误
您的代码中的数字?以防万一...

问候
凯格拉尔(Caglar AKYUZ)
卡加拉·阿奎兹(Caglar Akyuz)写道:
> ffredrik wrote:
>>SAM7XC256和SAM7S256会出现此问题。
>>
>>闪存为0x40000字节[%6kB],并映射到0x100000,
>即范围= 0x100000至0x13FFFF。
>>我正在使用SAM7X256并成功写入地址0x0013FF00。那里
>是1024页,并且您正在成功写入512以下的页面。是吗
>在计算页面时可能会犯一些错误
>您的代码中的数字?以防万一...
>

喔喔喔!请忽略此。对不起,垃圾。

您在第一封邮件中说:

“低于0x100000的写入可以正常工作,在此地址及更高地址处,
处理器崩溃”

如果您的闪存映射到0x100000,如何在0x100000以下写入?一世
认为您根本没有写任何东西要闪烁。

我想您的Flash编写例程有问题,可能是
它们不驻留在RAM中,可能未禁用中断或
地址有问题...

问候
凯格拉尔(Caglar AKYUZ)
那里错了。
该例程位于SRAM中,并且禁用了ints。

问候

凯格拉·阿库兹(Caglar Akyuz)写道:
> ffredrik wrote:
>>SAM7XC256和SAM7S256会出现此问题。
>>
>>闪存为0x40000字节[%6kB],并映射到0x100000,
>即范围= 0x100000至0x13FFFF。
>>我正在使用SAM7X256并成功写入地址0x0013FF00。那里
>是1024页,并且您正在成功写入512以下的页面。是吗
>在计算页面时可能会犯一些错误
>您的代码中的数字?以防万一...
>

喔喔喔!请忽略此。对不起,垃圾。

您在第一封邮件中说:

“低于0x100000的写入可以正常工作,在此地址及更高地址处,
处理器崩溃”

如果您的闪存映射到0x100000,如何在0x100000以下写入?一世
认为您根本没有写任何东西要闪烁。

我想您的Flash编写例程有问题,可能是
它们不驻留在RAM中,可能未禁用中断或
地址有问题...

问候
凯格拉尔(Caglar AKYUZ)

雅虎!群组连结
弗雷德里克写道:
>抱歉,忘了写0x40000以下的内容,我当时 wrong there.
>该例程位于SRAM中,并且禁用了ints。
>

我想你的意思是0x100000 :)

然后我不知道该说些什么,也许您被困在
未对齐的内存访问,发布您的代码将提供更多信息。

亲切的问候,
凯格拉尔(Caglar AKYUZ)
你好

我无法从详细信息中解释您遇到的问题
看过。您已经写出代码已用完RAM,并且
中断被阻止,这是正确的。

您是否正在等待FLASH发出信号,说明它已经完成
写?准备好要离开该地区吗
(尽管我不认为这将取决于地址)。

例如。
MC_FCR =(FLASH_KEY | FCMD_WP |(ulPage<<8));
而(!(MC_FSR& FLASH_READY)) {}

问候

标记

www.uTasker.com
嗨,马克,

我等待写操作完成,直到您完成。
处理器捕获到“未定义的指令”
我尝试写MC_FCR

弗雷德里克

马克·布彻(Mark Butcher)写道:嗨

我无法从详细信息中解释您遇到的问题
看过。您已经写出代码已用完RAM,并且
中断被阻止,这是正确的。

您是否正在等待FLASH发出信号,说明它已经完成
写?准备好要离开该地区吗
(尽管我不认为这将取决于地址)。

例如。
MC_FCR =(FLASH_KEY | FCMD_WP |(ulPage<<8));
而(!(MC_FSR& FLASH_READY)) {}

问候

标记

www.uTasker.com

雅虎!群组连结
弗雷德里克

您要在汇编器中调试吗?听起来好像程序
在这种情况下,从RAM运行的文件已损坏。我认为没有理由
否则,处理器在写入MC_FCR时应陷阱。

尝试逐步浏览assember中的代码(因为您不使用C代码,
可能不会看到汇编器是否损坏)
正常工作,并注意所使用的说明(以及对齐方式)
[拇指或手臂模式]加上处理器模式[主管,用户等]
处理器状态中的中断屏蔽位的状态和状态
登记)。然后在失败的情况下重复,可能您会
看到差异-例如操作模式或说明
它正在尝试执行。

不幸的是,您遇到的令人讨厌的问题。我一直在写
SAM7X256中FLASH的最后一个扇区,最近没有任何
困难,所以我不希望出现一些奇怪的芯片错误。

问候

标记

http://www.uTasker.com

---在A ...中,ffredrik写道:
>
> Hi Mark,
>
>我等待写操作完成,直到您完成。
>处理器捕获到“未定义的指令”
>我尝试写MC_FCR
>
> Fredrik
>
>马克·布彻(Mark Butcher)写道:嗨
>
>我无法从详细信息中解释您遇到的问题
>看过。您已经写出代码已用完RAM,并且
>中断被阻止,这是正确的。
>
>您是否正在等待FLASH发出信号,说明它已经完成
>写?准备好要离开该地区吗
>(尽管我不认为这将取决于地址)。
>
> Eg.
>MC_FCR =(FLASH_KEY | FCMD_WP |(ulPage<<8));
> while (!(MC_FSR & FLASH_READY)) {}
>
> Regards
>
> Mark
>
> www.uTasker.com
>
>
> Yahoo! Groups Links
>