OpenEdv-开源电子网

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

红牛移植战舰103 汉字显示实验 汉字显示失败

[复制链接]

7

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
94
金钱
94
注册时间
2014-3-24
在线时间
21 小时
发表于 2016-4-1 12:59:37 | 显示全部楼层 |阅读模式
1金钱
我是将战舰汉字显示程序移植到 红牛开发板(两个SPI FLASH 不同:战舰 W255Q64  8M ,红牛是AT45DB161B  2M),移植后也是上面的问题(界面一样)。针对2楼说法,我的字库应该已经从SD卡成功更新进了FLASH了---复位后跳过更新界面 直接显示后面内容。

433ee916a8f98b3c8f1840a6b0b2e690_164.jpg
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2016-4-1 21:33:20 | 显示全部楼层
检查SPI FLASH的底层操作是否有问题。
回复

使用道具 举报

7

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
94
金钱
94
注册时间
2014-3-24
在线时间
21 小时
 楼主| 发表于 2016-4-2 11:17:07 | 显示全部楼层
本帖最后由 liushuai199005 于 2016-4-2 21:35 编辑

谢谢原子哥。麻烦原子哥继续跟踪指导!!我继续调试
第一:关于SPI FLASH的底层操作问题(在进行汉字显示实验之前,我已经将单独的SD卡实验--SPI方式,FATFS实验,外部SPI   FLASH 实验--移植原子哥毕设的AT45DB161--然后按照战舰开发指南上的“SPI实验”移植成功,单独的外设都在战舰例程上移植成功)。我曾经也考虑过SPI FLASH的底层操作(即单独的将 SPI实验--AT45DB161--在战舰上移植成功 并不等同于 在汉字显示实验中 能够成功显示汉字,但是检查底层可操作性不强---对于底层我没有一句一句的分析底层代码,想法是某个芯片/外设的底层是一样的,我只用在底层基础上进行应用层的开发即可,这实际上是这样一个问题----即学习战舰开发板的方法,是将整个程序中每一句代码都分析一遍 都搞明白,还是有所取舍。比如学习LCD显示时的 LCD底层驱动有没有必要详细的分析代码)。【补充:下面通过LED灯调试发现,(是地址错误问题)原因可能就是 FLASH底层操作问题。具体测试如下:(1)我将 字库起始地址(见下面第二条分析)改变后程序会重新更新字库,此时我在updata_fontx函数中调用的SPI_Flash_Write函数中使用LED3进行测试 程序出错---地址超出SPI芯片范围,具体 相关部分程序如下面附件所示:从倒数第三行代码开始。此处出错,为何超范围??
22.png
(2)在Get_HzMat 函数中调用的SPI_Flash_Read函数中我通过LED灯调试发现“地址超出了AT45DB161的范围 错误的返回了”,而单独移植的SPI实验中(SPI flash底层程序两个例程相同 没改)地址不超 测试LED灯不亮。具体 相关部分程序如下面附件所示:从倒数第三行代码开始。此处出错,为何超范围?? 是需要修改SPI flash的底层操作函数(若是,为何单独移植的SPI 实验就能成功? 两者有何不同??) 还是 下面第二条分析中的地址??  怎样修改?】
spi.png

通过上面两段代码的LED灯测试发现: 更新字库时的 向SPI FLASH中写汉字点阵 地址超出SPI芯片范围;读汉字时 调用的 读SPI FLASH中的数据时 地址也超范围。两者问题一样。怎样修改??

第二:我分析了可能的原因,战舰SPI FLASH是W25Q64  8M(前6M用于文件系统管理部分 + 第6M后的500K作为用户使用部分 + 最后的1.5M 是字库部分),我的红牛SPI FLASH是AT45DB161--  2MB-- 汉字显示实验移植时在 font_init()函数中我将 FONTINFOADDR=(1024*1+500)*1024;  即从第1.5M开始存储字库(我查到本例程中字库占用 560KB,于是怀疑分0.5M给字库不够用,又改为FONTINFOADDR=(1024*1+100)*1024;),还是不行。但是表现有所不同(将起始地址前移 后):Show_Font(204,190,fontx,16,0); 和 Show_Font(168,212,fontx,12,0);后面显示的汉字由原来的 始终是蓝色的实方框 变为 开始显示出几个变化的乱码汉字 后面又变成了 蓝色的实方框。 结论:移植时除了修改上面 字库起始地址外 还要修改哪些内容??

第三,对于汉字显示失败,我尝试过 使用JLINK进行仿真跟踪代码,仿真界面结果如下(说明:单步仿真 Show_Str(60,50,200,16,"战舰 STM32开发板",16,0); 现单独仿真到“战”字,但是仿真显示并不是“战”字,显示就出错----结合上面第一条中的测试,估计因为 更新字库时地址出错导致的现在 读数据时 出错        )
32.png
第四,我将 W25Q64 和 AT45DB161的底层操作函数进行了对比,因为 flash只能写1 不能写0,在对W25Q64 写操作时 先进行了擦除,但是移植原子哥的 毕设(使用AT45DB161)进行写操作时 没有擦除(擦除指令仅仅使用条件编译,程序中并没有使用),这样会不会影响??(当然,在单独SPI实验移植时 并没有出错。)


回复

使用道具 举报

69

主题

495

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2197
金钱
2197
注册时间
2015-11-14
在线时间
542 小时
发表于 2016-4-2 11:32:36 | 显示全部楼层
正点原子 发表于 2016-4-1 21:33
检查SPI FLASH的底层操作是否有问题。

原子哥,我私信你的问题,能不能回答一下?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2016-4-3 22:03:15 | 显示全部楼层
单模先声 发表于 2016-4-2 11:32
原子哥,我私信你的问题,能不能回答一下?

私信不解决问题。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2016-4-3 22:06:22 | 显示全部楼层
liushuai199005 发表于 2016-4-2 11:17
谢谢原子哥。麻烦原子哥继续跟踪指导!!我继续调试
第一:关于SPI FLASH的底层操作问题(在进行汉字显示 ...

建议:
1,写一个底层读写函数,并验证。类似:

void SPI_Flash_Write(u8* pBuffer,u32 WriteAddr,u16 NumByteToWrite)   
和:
void SPI_Flash_Read(u8* pBuffer,u32 ReadAddr,u16 NumByteToRead)  
的功能。这两个函数一定要正确。

2,实现1的前提下,先弄一个字库,比如12*12,然后写入SPI FLASH,验证一下。
可以写入数据后,读出来,通过串口打印,一般可以检查前面一点数据,和后面一点数据,就可以大概确认你的操作是否正确了。

注意:数据对比,可以用WINHEX看。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-19 11:48

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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