【赚周年币】技术帖Week2-Day3——LPC824 Lite之十、SPI FLASH测试
#线上活动
2887 人阅读
|
0 人回复
|
2017-01-10
TA的每日心情 | 开心 半小时前 |
|---|
签到天数: 4273 天 连续签到: 2 天 [LV.Master]伴坛终老
司徒
- 积分
- 49099
    

|
|
本帖最后由 toofree 于 2017-1-17 23:37 编辑
【赚周年币】技术帖Week2-Day3——LPC824 Lite之十、SPI FLASH测试
前几天,想把Nokia5110 LCD屏,从IO模拟方式,改到SPI。苦苦折腾了3、4个小时没能成功。正好LPC824 Lite上有SPI Flash W25Q32,那么先测试一下SPI Flash,或许能找到点殊死马迹。说测就测,开整。
使用YL-LPC824光盘资料.rar中程序模板,打开工程“YL-LPC824光盘资料\SDK\peri_example\spi\spi_flash\project_spi_basic.uvoptx”。
直接编译,生成“spi_basic.bin”文件。把这个文件,直接拖到LPC824 Lite板卡在本地自建的MBED 模拟盘中,直到“spi_basic.bin”文件自动消失,表示程序下载成功。
仿真运行程序,在197行处设置断点,并且添加WrBuf、RdBuf到Memory1、Memory2查看窗口。
全速运行程序,直到断点处停下。可以看到WrBuf、RdBuf数据为00到09的16进制数。这是因为程序中设置了BUFFER_SIZE 为10,因此只测试10个数据。
程序过断点后,板上LED灯,由只亮LED1,变为LED1和LED3同时亮,绿色通信指示灯LED10,高频度闪烁。这个板上LED与原理图上是对不上的。板上的LED9到LED11,对应原理图中的D1到D3,从颜色和电阻可以区分出来,LED9到LED11分别又叫LED_RED、LED_GREEN、LED_BLUE;板上的LED1到LED8对应原理图中的D7到D14,又分别叫LED0到LED7。反正是乱七八遭的。
借用网上的一张晒板图
本着怀疑的态度,以为10字节测试不足以说明问题,试着改到512字节。第39行,宏定义改为512
相同的方法测试,编译、仿真、打断点、设内存观察窗口、全速跑。当程序跑到断点时候,惊奇的事情又发生了。前256个字节,写、读缓存数据相同,后256字节出了问题,没有读回来,全是0xff。
那么到底问题出在哪呢,经验告诉我们,很有可能问题出在了“写”的过程中。定位到w25x32.c文件的191行,这个段写程序上,查看一下它的原始函数是怎么写的。
查看原函数,参数类型是对的。但是函数里面,总感觉哪不对,有点太简单了。SPI Flash 块、扇区、页,最基本的应该是页呀,怎么也得找到个跨页的写吧,但是这里没有,当然我也不会加。
于是乎,往下看程序,突然眼前一亮,在第215行,找到个函数。flash_write_data(),这个可以跨扇区写,那么当然跨页也不成问题吧。
于是把主程序中用到的flash_write_sector()函数替换为flash_write_data()。
再次编译、打断点仿真运行,直到断点处停下来,观察内存窗口。这次结果全部正确。
这个flash_write_data()函数,底层实际也是跨页写的,而不是直接就扇区。尽管调用了扇区写,但是把数据长度限定在页长度256字节之内。那么要改flash_write_sector()扇区写的话,也不外乎是再套一层,把一次连续写入长度限定在256字节之内。那么也就没必要去改程序了,直接用flash_write_data()即可。
真是不试不知道,一试一堆坑呀。
把修改后的测试主程序,打包附上。
|
评分
-
查看全部评分
|
|
|
|
|
|
|
|