打印
[AVR单片机]

AVR flash问题

[复制链接]
1480|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
大头BB|  楼主 | 2014-8-1 12:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 大头BB 于 2014-8-1 15:11 编辑

开发环境:avr studio 6    attiny841    8Kflash      地址0x0000-0x0fff
1.sudio 6 烧写flash时候地址是怎么分配的,是从0x0000开始按顺序编满为止,还是说studio 6随机分配地址空间。
2.在studio 6中如何查看ram和flash空间大小
3.如何在程序中定义一个地址区间,譬如说,定义一个从地址0x0001起始的100个byte的数组a[],只允许这个数组访问,如何实现。
我计划是在程序中把一些参数值写入到flash做掉电保存,eeprom不够用,现在可以写入也可以读取,但是我不知道写入的地址空间
是否为flash的应用程序空间,然后把程序代码给擦除了。

找到方法了,转载过来
一.您可通过如下步骤来实现,指定程序代码空间在flash中的位置。
1.在Atmel Studio 6.1中打开目标
2.在Solution Explorer窗口选中项目文件名,右键单击Property;
3.选中Toolchain->AVR/GNU Linker->Memory Settings;
4.在该对话框FLASH segment窗口中,选中Add Item;
5.在空行中输入:.text=0x500 其中0x500为期望的程序空间起始地址,注意目标地址(0x1000)被除2的关系;
6.保存设置并对工程进行Build Solution;
7.打开Solution Explorer->Output Files->**.lss文件(**表示项目名)在“LMA列与.text行”,可查看起始地址是否和设定吻合。

相关帖子

沙发
wxrbjrx| | 2014-10-21 16:35 | 只看该作者
你好,程序运行中,怎么实现的对flash的读写?

使用特权

评论回复
板凳
大头BB|  楼主 | 2014-10-23 10:47 | 只看该作者
wxrbjrx 发表于 2014-10-21 16:35
你好,程序运行中,怎么实现的对flash的读写?

AVR有自带的对flash读写的函数

使用特权

评论回复
地板
wxrbjrx| | 2014-10-27 16:50 | 只看该作者
Flash 是以页的形式组织起来的,如P 261 Table 126 所示。编程Flash 时,程序数据被锁
存到页缓冲区中。这样一整页的程序数据可以同时得到编程。下面的步骤描述了如何对
Flash 进行编程:
A. 加载“ 写Flash” 命令:
1. 将XA1、XA0 置为“10”,启动命令加载。
2. 将BS1 置"0”。
3. DATA 赋值为“0001 0000”,这是写Flash 命令。
4. 给XTAL1 提供一个正脉冲以加载命令。
B. 加载地址低位字节 :
1. 将XA1、XA0 置为 “00”,启动地址加载。
2. 将BS1 置 “0”,选择低位地址。
3. DATA 赋值为地址低位字节(0x00 - 0xFF)。
4. 给XTAL1 提供一个正脉冲,加载地址低位字节。
C. 加载数据低位字节:1. 将XA1、XA0 置为“01”,启动数据加载。
2. DATA 赋值为数据低位字节(0x00 - 0xFF)。
3. 给XTAL1 提供一个正脉冲,加载数据字节。
D. 加载数据高位字节 :
1. 将BS1 置为“1”,选择数据高位字节。
2. 将XA1、XA0 置为“01”,启动数据加载。
3. DATA 赋值为数据高位字节(0x00 - 0xFF)。
4. 给XTAL1 提供一个正脉冲,进行数据字节加载。
E. 锁存数据:
1. 将BS1 置为“1”,选择数据高位字节。
2. 给PAGEL 提供一个正脉冲,锁存数据( 见 Figure 121 信号波形)。
F. 重复B 到E 操作,直到整个缓冲区填满或此页中所有的数据都已加载。
地址信息中的低位用于页内寻址,高位用于FLASH 页的寻址,详见 P 265 Figure 120 。
如果页内寻址少于8 位( 页地址< 256),那么进行页写操作时地址低字节中的高位用于页
寻址。
G. 加载地址高位字节:
1. 将XA1、XA0 置为“00”,启动地址加载操作。
2. 将BS1 置为 “1”,选择高位地址。
3. DATA 赋值为地址高位字节(0x00 - 0xFF)。
4. 给XTAL1 提供一个正脉冲,加载地址高位字节。
H. 编程一页数据:
1. 给WR 提供一个负脉冲,对整页数据进行编程, RDY/BSY 变低。
2. 等待RDY/BSY 变高( 见 Figure 121 的信号波形)。
I. 重复B 到H 的操作,直到整个Flash 编程结束或者所有的数据都被编程。
J. 结束页编程:
1. 1. 将XA1、XA0 置为“10”,启动命令加载操作。
2. DATA 赋值为“0000 0000”,这是不操作指令。
3. 给XTAL1 提供一个正脉冲,加载命令,内部写信号复位。

使用特权

评论回复
5
wxrbjrx| | 2014-10-27 16:51 | 只看该作者
是这个吗?我看的是mega88的手册

使用特权

评论回复
6
wxrbjrx| | 2014-10-27 17:00 | 只看该作者
我找的不对,mega64和mega88具体怎么操作,能告诉我在手册的哪一页吗?谢谢了

使用特权

评论回复
7
大头BB|  楼主 | 2014-10-28 10:25 | 只看该作者
wxrbjrx 发表于 2014-10-27 17:00
我找的不对,mega64和mega88具体怎么操作,能告诉我在手册的哪一页吗?谢谢了 ...

https://bbs.21ic.com/forum.php?mod=attachment&aid=MzU2NzQ4fDFhOGYyODJhNGJiODcyNjNkNGNmZjBhMDg2OTFkODgzfDE3MTYwMDYzOTU%3D&request=yes&_f=.pdf
我是看这个的,你看看适不适合你


使用特权

评论回复
8
wxrbjrx| | 2014-11-3 13:44 | 只看该作者
谢谢啦,我好好看看

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

23

主题

77

帖子

0

粉丝