如何读写外部存储器

发布于 2022-09-20 09:45:29 字数 541 浏览 19 评论 0

基本结构:s3c2410的板子,2.6.8.1内核,板子外接了一个SRAM。
为了测试这个结构的正确性,我写了一个字符驱动程序,在驱动程序初始化例程中,也就是__init例程中,我首先使用ioremap_nocache(BASE_ADDR,SRAM_SIZE)将物理地址映射为虚拟地址(BASE_ADDR是硬件连线所决定的SRAM的基地址),然后使用for循环 对所有单元进行读操作

[C/C++ code]
for(i=0;i<1000;i++)//对所有单元读1000次
{
   for(j=0;j<SRAM_SIZE;j++)//循环读所有单元
  {
    value=readb(ptr);
    ptr++;
   }
}

[/code]

结果发现,读了两三次就发生硬件重启,但是,我把最外层的for去掉之后,就正常了。不知道是不是我的思路有问题?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

终弃我 2022-09-27 09:45:29

你这个ptr指针有问题,不断地加,最后加到哪里去了?都超过你SRAM的大小了。

生来就爱笑 2022-09-27 09:45:29

for(i=0;i<1000;i++)//对所有单元读1000次
{
   ptr = SRAM_START;
   for(j=0;j<SRAM_SIZE;j++)//循环读所有单元
  {
    value=readb(ptr);
    ptr++;
   }
}

深巷少女 2022-09-27 09:45:29

贴出详细的代码方便分析

伤感在游骋 2022-09-27 09:45:29

原帖由 zclever 于 2008-7-28 16:07 发表
基本结构:s3c2410的板子,2.6.8.1内核,板子外接了一个SRAM。
为了测试这个结构的正确性,我写了一个字符驱动程序,在驱动程序初始化例程中,也就是__init例程中,我首先使用ioremap_nocache(BASE_ADDR,SRAM ...

从硬件设计上得到这块SRAM 的物理地址范围,比如起始地址0xF0000000,大小512K
如果你的CPU 没有开始类似于MMU 的内存管理功能,则可以直接通过物理地址访问内存,如果开启了内存管理功能,则需要把这块内存映射到虚拟地址空间
知道了硬件的映射地址直接读写就可以了.

比如你要从0xF0000000读出一个字节;

volatile unsigned int  Buf = 0xF0000000;
char                  read_byte;

read_byte = (char *)Buf;
写的话,反过来就是了。
(char *)Buf = 'a';
16位,32位一样的操作,改变一下指针的类型就可以。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文