OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7989|回复: 12

能否在战舰板上实现,用U盘方式直接把字库存在SPI-FLASH上?

[复制链接]

5

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2013-7-30
在线时间
0 小时
发表于 2014-8-1 17:23:40 | 显示全部楼层 |阅读模式
5金钱
战舰例程中更新字库太麻烦了,最近在看U盘的例程,有个想法
1. 把W25X64后2M空间模拟成U盘,
2. 用PC直接把字库bin文件拷进去,
3. 使用时MCU直接去W25X64存字库文件的位置读取
限于本人水平有限,文件系统不熟悉,有以下疑问,请原子哥指点:
1. 历程中是把前面6M作为U盘,Mass_Memory_Size[1]=1024*1024*6;如果改为Mass_Memory_Size[1]=1024*1024*2,
   应该是把前2M作为U盘了,我怎么才能把后2M定位为U盘?
2. 我如果把整个8M都作为U盘,但怎么才能把拷贝的字库BIN文件存到我想存的后2M位置?
3. PC拷文件前,需要先格式化U盘,格式化后拷文件会在U盘存储文件信息,MCU在读取使用字库BIN时我怎么才能把这两者区分开?
请原子哥指点思路,先行谢过!

最佳答案

查看完整内容[请看2#楼]

1,建议你从flash的地址0开始做文件系统管理,你要后2M,那就加2M的偏移量上去,比如原来访问地址0的,变成访问0+2*1024*1024. 2,如果8M都做U盘,那么BIN文件的位置 完全是由文件系统管理,地址是不可预知的。你只能去读这个文件,才能知道文件存放的具体位置。 3,PC拷贝进去的是个文件,你单片机读取的时候,也是读这个文件。不需要区分。MCU使用字库,看你用哪种方法,可以直接访问BIN文件,也可以将BIN文件拷贝到某个地 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2014-8-1 17:23:41 | 显示全部楼层
1,建议你从flash的地址0开始做文件系统管理,你要后2M,那就加2M的偏移量上去,比如原来访问地址0的,变成访问0+2*1024*1024.
2,如果8M都做U盘,那么BIN文件的位置 完全是由文件系统管理,地址是不可预知的。你只能去读这个文件,才能知道文件存放的具体位置。
3,PC拷贝进去的是个文件,你单片机读取的时候,也是读这个文件。不需要区分。MCU使用字库,看你用哪种方法,可以直接访问BIN文件,也可以将BIN文件拷贝到某个地址,去访问这个地址。
但是如果你8M都用作U盘,那就没地址可用了。。。
只能采用第一种方法。直接访问BIN文件的方法。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

38

主题

2061

帖子

6

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3273
金钱
3273
注册时间
2012-1-16
在线时间
37 小时
发表于 2014-8-1 17:35:32 | 显示全部楼层
想法不错,帮顶。。。
站在巨人的肩膀上不断的前进。。。
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-8-1 19:38:03 | 显示全部楼层
根据地址区分即可
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

5

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2013-7-30
在线时间
0 小时
 楼主| 发表于 2014-8-4 11:55:53 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
回复【4楼】正点原子:
---------------------------------
感谢原子哥及时回答,还有个疑问!

1,建议你从flash的地址0开始做文件系统管理,你要后2M,那就加2M的偏移量上去,比如原来访问地址0的,变成访问0+2*1024*1024.
-------------------------------------------------------------------
我在例程中找了,没找到在哪修改偏移量,
在Write_Memory (u8 lun, u32 Memory_Offset, u32 Transfer_Length)中的Memory_Offset偏移量,我在往上一级找,
     SCSI_Write10_Cmd(CBW.bLUN , SCSI_LBA , SCSI_BlkLen);中的SCSI_LBA我就再找不到在哪设置了!
请原子说说在哪修改这个偏移量?
回复

使用道具 举报

5

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2013-7-30
在线时间
0 小时
 楼主| 发表于 2014-8-4 11:58:46 | 显示全部楼层
回复【3楼】Badu_Space:
---------------------------------
能否把思路说清楚点,怎么地址分区?谢谢!
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-8-4 12:53:28 | 显示全部楼层
回复【6楼】ghpboy:
---------------------------------
flash是4K一个块,2M怎么计算知道吧,原子哥说的都很明白啦,建议用0 ~ 6M地址做文件系统管理,6 ~ 8M做字库,后2M的地址就是6*1024*1024
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

2

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
70
金钱
70
注册时间
2018-2-20
在线时间
33 小时
发表于 2018-3-18 22:06:34 | 显示全部楼层
问下,如果直接用U盘烧录,文件系统是2M开始那么如果读取的画是从初始地址2M开始的吗
回复

使用道具 举报

26

主题

261

帖子

1

精华

高级会员

Rank: 4

积分
734
金钱
734
注册时间
2013-11-1
在线时间
28 小时
发表于 2018-3-18 23:23:27 | 显示全部楼层
建议楼主百度一下 fats32  flash 这个我以前弄过,建议用文件系统管理方便。
回复

使用道具 举报

2

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
70
金钱
70
注册时间
2018-2-20
在线时间
33 小时
发表于 2018-3-19 17:29:38 | 显示全部楼层
zhao305149619 发表于 2018-3-18 23:23
建议楼主百度一下 fats32  flash 这个我以前弄过,建议用文件系统管理方便。

如果用FATS的话,那么读取地址怎么确定的
回复

使用道具 举报

26

主题

261

帖子

1

精华

高级会员

Rank: 4

积分
734
金钱
734
注册时间
2013-11-1
在线时间
28 小时
发表于 2018-3-19 21:37:22 | 显示全部楼层
dkkjkkka 发表于 2018-3-19 17:29
如果用FATS的话,那么读取地址怎么确定的

什么地址,如果是文件管理系统的话,直接open就可以了啊
回复

使用道具 举报

2

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
70
金钱
70
注册时间
2018-2-20
在线时间
33 小时
发表于 2018-3-19 21:46:59 | 显示全部楼层
zhao305149619 发表于 2018-3-19 21:37
什么地址,如果是文件管理系统的话,直接open就可以了啊

那么中文字符显示要自己写接口吗,不能直接用原子的吧
回复

使用道具 举报

26

主题

261

帖子

1

精华

高级会员

Rank: 4

积分
734
金钱
734
注册时间
2013-11-1
在线时间
28 小时
发表于 2018-3-19 22:00:15 | 显示全部楼层
int GetASCIICode_from_sd(unsigned char* pBuffer,const unsigned char *acsii)
{
    unsigned int pos;       
    f_mount(0, &fs);
    rest  = f_open(&fdst, "0:/ascii.bin", FA_OPEN_EXISTING | FA_READ);
   
    if ( rest  == FR_OK )
    {
                pos=(((*acsii-0x20)*16));
            f_lseek (&fdst, pos);                                                                                                                 //Ö¸ÕëÆ«òÆ
        rest= f_read( &fdst, pBuffer, 16, &bw );                 //16*8′óD¡μÄoo×Ö Æä×ÖÄ£ Õ¼óÃ16¸ö×Ö½ú                        
        f_close(&fdst);
                        
                return 0;  
    }
    else
        return -1;   
}
关键的一个给你,只能帮你到这里了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-8 02:31

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表