打印

如何将几个数组转换成烧录器认识的二进制文件?

[复制链接]
6298|20
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ZRL700424|  楼主 | 2011-1-3 09:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
现在有个项目程序量非常大(几个很大的数组),远远超过了单片机的容量,也超过了编译器能编译的范围,所以想外挂一个1M的并口FLASH芯片,专门存放这几个数组,用专用烧录器先把数组烧录进去,供单片机调用。

问题:
1,怎样把这几个数组转成二进制文件?
2,那么大容量的FLASH芯片,单片机能访问吗?

相关帖子

沙发
hycloudy| | 2011-1-3 09:50 | 只看该作者
你单片机型号都没选好?好象是要解决大容量的数据寸储问题,一般的8位单片机地址空间不够,可采用ARM芯片,当单片机使用,分页管理外部的FLASH。
第一个问题太低级了。

使用特权

评论回复
板凳
lws| | 2011-1-3 09:59 | 只看该作者
1、可以在计算机上编程把数据先保存成BIN文件,然后通过烧录器把数据烧录进去
2、单片机能访问。如果是8位机就需要多用几个口线了,具体应用看你使用的单片机的类型和型号

建议:如果是一般应用,用串行FLASH就可以,这样可以节省口线
如果在程序中内嵌FLASH烧写程序,通过串口下载,以后更改数据就容易了。

使用特权

评论回复
地板
ZRL700424|  楼主 | 2011-1-3 14:50 | 只看该作者
回2楼:
单片机用普通的8位芯片,什么型号都行,只要IO口足够(我想用并行FLASH,这样速度会快些);
第1个问题太低级了?:L

回3楼:
1,有现成的软件吗?
2,我估计应该是能访问的,不然外接多大的FLASH还要看单片机能不能支持,这样外扩FLASH就没什么意义了。

使用特权

评论回复
5
hycloudy| | 2011-1-3 15:02 | 只看该作者
你是并行1M的flash 那么只少要20根地址线,同时最好CPU 提供读写时序,程序简单些,推荐你用CY8051F020 有接口,价格也可以,如果你不考虑成本用ADUC8xx系列,他可外括16M XRAM

使用特权

评论回复
6
ZRL700424|  楼主 | 2011-1-3 15:49 | 只看该作者
回楼上,单片机一抓一大把,不是我关心的问题。
我只想知道要外扩FLASH对单片机除了IO口等之外有没有特别的要求(现在已经知道没有特殊要求了),现在还剩第1个问题,你不会是告诉我直接用C编译器编译吧?

使用特权

评论回复
7
jack.king| | 2011-1-3 16:42 | 只看该作者
定义一个地址:若全部是数据就用汇编写下:org XXXXH
用keil编译下。直接烧写,例如27C512

使用特权

评论回复
8
ZRL700424|  楼主 | 2011-1-3 16:48 | 只看该作者
本帖最后由 ZRL700424 于 2011-1-3 16:52 编辑

keil能编译1M或者是更大的程序?
我现在用的瑞萨的限制在16K(免费的),不知道付费的有没有限制,等上班了问一下代理商;
但我想应该有限制吧?比如:编译时要选个单片机,哪有这么大容量的单片机呢?(比如2M,32M或更大)

使用特权

评论回复
9
jack.king| | 2011-1-3 17:03 | 只看该作者
呵呵!不选器件直接编译,若只是外接27C521可以接很多就看你的外面电路怎么给个选通地址就可以了,
或者采用上面有大侠说的可以用ADI的
8051 based controller with High-Speed Core,
8-channel true 12-bit ADC,
Dual 16-bit DAC's, WDT, SPI, UART,
On-chip DMA controller, 32 I/O lines,
3 Timers/Counters, WDT, SPI, UART, Dual Data Pointers,
Timer Interval Counter,
11 Interrupt Sources/2 Priority Levels,
62K Flash EEPROM Program Memory,
2K Data Flash EEPROM, 2304 Bytes On-chip RAM,
RAM banking up to 16M Bytes external address space,
UART,SPI, I2C, brown out detect.
*** IMPORTANT ***
The PK51 Professional Developer's Kit is required
if you wish to create programs that access the
16M Byte external address space.

使用特权

评论回复
10
hycloudy| | 2011-1-3 19:47 | 只看该作者
6楼: 好心提醒你:并口FLASH 要考虑CPU的寻址空间及接口的时序!!!依你的语气,你抓一把能外括1M FLASH 51内核的CPU 看看!说实在的就用CY8051F020 都有难度

使用特权

评论回复
11
lyjian| | 2011-1-3 19:56 | 只看该作者
楼上,外扩1M FLASH 51内核的CPU确实一大把,最古老的8031都行,不用到F020这个等级。

使用特权

评论回复
12
hycloudy| | 2011-1-3 20:10 | 只看该作者
是16*64K字节吧?

使用特权

评论回复
13
lyjian| | 2011-1-3 20:19 | 只看该作者
是8*1024KByte
或者更大,都行,随你便
不要以为寻址空间只有64K就只能扩展到64K

使用特权

评论回复
14
hycloudy| | 2011-1-3 22:22 | 只看该作者
这个当然知道,64K的寻址空间,1M的FLASH XDATA,如果1页64K,你至少要再加4根IO口线,去分页寻址,麻烦?

使用特权

评论回复
15
lyjian| | 2011-1-3 22:38 | 只看该作者
一点都不麻烦

使用特权

评论回复
16
江陵龙少| | 2011-1-3 23:14 | 只看该作者
将数组转化为bin文件,可以试试winhex

使用特权

评论回复
17
ZRL700424|  楼主 | 2011-1-4 07:46 | 只看该作者
6楼: 好心提醒你:并口FLASH 要考虑CPU的寻址空间及接口的时序!!!依你的语气,你抓一把能外括1M FLASH 51内核的CPU 看看!说实在的就用CY8051F020 都有难度 ...
hycloudy 发表于 2011-1-3 19:47


是我没弄明白,还是你把我搞糊涂了?
比如外扩39VF020,它有256K*8个地址,所以它有18位地址线;
           39VF040,它有512K*8个地址,所以它有19位地址线;
要读某个地址的数据时,单片机输出相应的地址数据,再从数据口读入,只要IO口足够,是个单片机就能用啊,难道我理解错了?

使用特权

评论回复
18
ZRL700424|  楼主 | 2011-1-4 08:16 | 只看该作者
将数组转化为bin文件,可以试试winhex
江陵龙少 发表于 2011-1-3 23:14


这个,好像不合适。

使用特权

评论回复
19
ZRL700424|  楼主 | 2011-1-4 08:20 | 只看该作者
呵呵!不选器件直接编译,jack.king 发表于 2011-1-3 17:03


好像操作不了(我除了51,其他单片机基本上都用过:PIC、瑞萨、三星、飞思卡尔、ST、AVR、NEC、合泰、凌阳、十速、义隆、海尔等等)

使用特权

评论回复
20
lws| | 2011-1-4 09:50 | 只看该作者
在8位机系统里,放在程序里编译要把这个大数组拆成若干个小于64的数组,然后编译生成HEX,转换成BIN文件。然后在WINHEX打开生成的BIN文件,把若干个数组提出来另存成若干个BIN,合并,再用烧写器烧入。巨麻烦。用32位机系统应该没有这个限制,可以试一下。
不过,我还是建议:要是要求不是太高就用串行FLASH吧,自己写个程序通过串口下载(直接发送数据文件,甚至就是文本文件),单片机解析一下写入FLASH,也不是太费事吧

使用特权

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

本版积分规则

26

主题

677

帖子

0

粉丝