查看: 1471|回复: 3

[分享] serprog(spi flash 编程器)在lpc54114-lite上的实现

[复制链接]
  • TA的每日心情
    开心
    2022-11-9 15:32
  • 签到天数: 188 天

    [LV.7]常住居民III

    3

    主题

    288

    帖子

    4

    高级会员

    Rank: 4

    积分
    820
    最后登录
    2023-8-23
    发表于 2021-4-25 22:24:53 | 显示全部楼层 |阅读模式
    本帖最后由 li--wei--hao 于 2021-5-21 20:51 编辑

    很久之前从社区活动中拿到一块lpc54114-lite开发板,这两年来工作原因很久没有写单片机代码了,最近恰好看到一篇Linux 下离线烧写 SPI 闪存 的博文,这篇博文中比较详细的介绍了该工具的原理,下面摘录一段:

    无意中发现了 coreboot (原 LinuxBIOS )项目开发的 flashrom 工具居然带有离线编程功能,除了支持一票比较贵的专用编程器/基于 FTDIxxxxH 的编程器外,还支持一种叫做 serprog 的协议,可以通过串口操作单片机来给 SPI 闪存编程。这样一来就方便了。

    看完该博文后,仔细阅读了该博主的代码和flashrom的wiki,心血来潮,便决定在lpc54114-lite上实现一下,正好板载的mcu既有USB全速设备还有一片spi flash,完全满足所有实验条件。

    由于目前我主要使用Linux操作系统,因此本项目基于make和gcc进行构建,项目中涉及到的Makefile规则比较简单,想必大家也很容易看懂,就不赘述了,下面对涉及的一些模块进行一些简单说明。

    spi主机配置及使用十分简单,这里便不做过多介绍了;usb部分,我没有使用nxp官方sdk提供的协议栈,而是使用了tinyusb这个开源项目,因为tinyusb使用起来比官方库简单许多;os方面我使用了freertos,这样可以使代码编写更加简单灵活;除此之外便是对serporg协议的实现了,这个难度也不大,只要照着flashrom的文档,参考上文博主github中代码,很快便可以完成了。

    下面是我简单的测试的读写速率:

    1. # 读flash, W25X80, 1MiB
    2. $ time sudo flashrom -p serprog:dev=/dev/ttyACM0:4000000 -c W25X80 -r /tmp/test.bin
    3. flashrom  on Linux 4.19.0-16-amd64 (x86_64)
    4. flashrom is free software, get the source code at https://flashrom.org

    5. Using clock_gettime for delay loops (clk_id: 1, resolution: 1ns).
    6. serprog: Programmer name is "lpc-serprog"
    7. Found Winbond flash chip "W25X80" (1024 kB, SPI) on serprog.
    8. Reading flash... done.

    9. real    0m3.106s
    10. user    0m1.163s
    11. sys     0m0.055s

    12. # 擦除flash, W25X80, 1MiB
    13. $ time sudo flashrom -p serprog:dev=/dev/ttyACM0:4000000 -c W25X80 -E
    14. flashrom  on Linux 4.19.0-16-amd64 (x86_64)
    15. flashrom is free software, get the source code at https://flashrom.org

    16. Using clock_gettime for delay loops (clk_id: 1, resolution: 1ns).
    17. serprog: Programmer name is "lpc-serprog"
    18. Found Winbond flash chip "W25X80" (1024 kB, SPI) on serprog.
    19. Erasing and writing flash chip... Erase/write done.

    20. real    0m25.594s
    21. user    0m23.017s
    22. sys     0m0.065s

    23. # 写flash, W25X80, 1MiB
    24. $ time sudo flashrom -p serprog:dev=/dev/ttyACM0:4000000 -c W25X80 -w /tmp/test.bin
    25. flashrom  on Linux 4.19.0-16-amd64 (x86_64)
    26. flashrom is free software, get the source code at https://flashrom.org

    27. Using clock_gettime for delay loops (clk_id: 1, resolution: 1ns).
    28. serprog: Programmer name is "lpc-serprog"
    29. Found Winbond flash chip "W25X80" (1024 kB, SPI) on serprog.
    30. Reading old flash chip contents... done.
    31. Erasing and writing flash chip... Erase/write done.
    32. Verifying flash... VERIFIED.

    33. real    0m17.041s
    34. user    0m2.757s
    35. sys     0m0.717s
    复制代码


    flashrom在数据流程之前还会有1秒时间消耗在同步阶段,减去该时间来看的话读写速率还是不错的,虽然相较于原博主的实现还略有不及。

    目前本项目的代码均托管在码云,链接为 https://gitee.com/ieiao/serprog-lpc54114-lite ,好了,以上就是全部内容了。


    该会员没有填写今日想说内容.
    回复

    使用道具 举报

    该用户从未签到

    35

    主题

    356

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    2575
    最后登录
    2023-6-23
    发表于 2021-4-26 14:42:56 | 显示全部楼层
    USB底层驱动是怎么搞定的?

    不会是直接对寄存器编程吧?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2022-11-9 15:32
  • 签到天数: 188 天

    [LV.7]常住居民III

    3

    主题

    288

    帖子

    4

    高级会员

    Rank: 4

    积分
    820
    最后登录
    2023-8-23
     楼主| 发表于 2021-4-26 17:17:16 来自手机 | 显示全部楼层
    香水橙 发表于 2021-4-26 14:42
    USB底层驱动是怎么搞定的?

    不会是直接对寄存器编程吧?

    lpc54114使用的是ip3511的usb ip,tinyusb有提供这个ip的实现,直接使用就好。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    35

    主题

    356

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    2575
    最后登录
    2023-6-23
    发表于 2021-5-13 13:51:05 | 显示全部楼层
    li--wei--hao 发表于 2021-4-26 17:17
    lpc54114使用的是ip3511的usb ip,tinyusb有提供这个ip的实现,直接使用就好。

    果然厉害 !
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-4-26 18:06 , Processed in 0.113911 second(s), 21 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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