查看: 2367|回复: 0

【赚周年币】技术帖Week2-Day3——LPC824 Lite之十、SPI FLASH测试

[复制链接]
  • TA的每日心情
    开心
    19 小时前
  • 签到天数: 3749 天

    连续签到: 75 天

    [LV.Master]伴坛终老

    发表于 2017-1-10 23:54:41 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 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”。
             傲游截图20170110235741.jpg

            直接编译,生成“spi_basic.bin”文件。把这个文件,直接拖到LPC824 Lite板卡在本地自建的MBED 模拟盘中,直到“spi_basic.bin”文件自动消失,表示程序下载成功。
             傲游截图20170110235854.jpg

            仿真运行程序,在197行处设置断点,并且添加WrBuf、RdBuf到Memory1、Memory2查看窗口。
             傲游截图20170111000441.jpg

            全速运行程序,直到断点处停下。可以看到WrBuf、RdBuf数据为00到09的16进制数。这是因为程序中设置了BUFFER_SIZE 为10,因此只测试10个数据。
             傲游截图20170111000826.jpg

            程序过断点后,板上LED灯,由只亮LED1,变为LED1和LED3同时亮,绿色通信指示灯LED10,高频度闪烁。这个板上LED与原理图上是对不上的。板上的LED9到LED11,对应原理图中的D1到D3,从颜色和电阻可以区分出来,LED9到LED11分别又叫LED_RED、LED_GREEN、LED_BLUE;板上的LED1到LED8对应原理图中的D7到D14,又分别叫LED0到LED7。反正是乱七八遭的。
             傲游截图20170111001325.jpg
             傲游截图20170111001335.jpg
            借用网上的一张晒板图
             傲游截图20170111002343.jpg

            本着怀疑的态度,以为10字节测试不足以说明问题,试着改到512字节。第39行,宏定义改为512
             傲游截图20170111002639.jpg

            相同的方法测试,编译、仿真、打断点、设内存观察窗口、全速跑。当程序跑到断点时候,惊奇的事情又发生了。前256个字节,写、读缓存数据相同,后256字节出了问题,没有读回来,全是0xff。
             傲游截图20170111003501.jpg
            
            那么到底问题出在哪呢,经验告诉我们,很有可能问题出在了“”的过程中。定位到w25x32.c文件的191行,这个段写程序上,查看一下它的原始函数是怎么写的。
           傲游截图20170111003854.jpg
           查看原函数,参数类型是对的。但是函数里面,总感觉哪不对,有点太简单了。SPI Flash 块、扇区、页,最基本的应该是页呀,怎么也得找到个跨页的写吧,但是这里没有,当然我也不会加。
           傲游截图20170111004106.jpg

            于是乎,往下看程序,突然眼前一亮,在第215行,找到个函数。flash_write_data(),这个可以跨扇区写,那么当然跨页也不成问题吧。
           傲游截图20170111004758.jpg

            于是把主程序中用到的flash_write_sector()函数替换为flash_write_data()。
           傲游截图20170111005251.jpg
          
            再次编译、打断点仿真运行,直到断点处停下来,观察内存窗口。这次结果全部正确。
             傲游截图20170111005603.jpg

            这个flash_write_data()函数,底层实际也是跨页写的,而不是直接就扇区。尽管调用了扇区写,但是把数据长度限定在页长度256字节之内。那么要改flash_write_sector()扇区写的话,也不外乎是再套一层,把一次连续写入长度限定在256字节之内。那么也就没必要去改程序了,直接用flash_write_data()即可。

            真是不试不知道,一试一堆坑呀。
            把修改后的测试主程序,打包附上。
             main_spi_basic.rar (2.59 KB, 下载次数: 9)

    评分

    参与人数 1 +18 收起 理由
    EEboard爱板网 + 18 3周发帖养成记 奖励

    查看全部评分

    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-4-24 19:25 , Processed in 0.148065 second(s), 26 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.