NXP

lpc1788移植u-boot-2010.03之spi flash移植

2019-07-12 12:17发布

lpc1788移植u-boot-2010.03之spi flash移植 2013-08-10 14:58:46

转载至:http://blog.chinaunix.net/uid-28974688-id-3842328.html
分类: LINUX u-boot-2010.03移植spi flash支持读、写、擦除操作!!!
开发环境:
MCU:       NXP  LPC1788
u-boot:     u-boot-2010.03
SPI Flash: AT45DB321D

 由于ATMEL的spi flash在u-boot中已经实现,我们就不要去写AT45DB321D的驱动了,现在考虑SPI总线的问题(u-boot中的spi驱动在driver/spi目录中),在driver/spi目录中可以看到各种芯片的spi总线实现,不过lpc1788是没有的,别动别动看到了一个soft_spi.c,好了现在spi总线的驱动也不用写了,直接用soft spi。

在lpc1788的配置文件中加入以下内容:

点击(此处)折叠或打开
  1. #define CONFIG_CMD_SF //加入cmd_sf.c文件的编译,实现u-boot中spi flash的操作命令sf
  2. #define CONFIG_SOFT_SPI //加入driver/spi/soft_spi.c文件编译,实现软件spi总线
  3. #define CONFIG_SPI_FLASH //加入driver/mtd/spi/spi_flash.c文件编译
  4. #define CONFIG_SPI_FLASH_ATMEL //加入driver/mtd/spi/atmel.c文件编译,实现AT45的驱动


  5. #define CONFIG_SF_DEFAULT_MODE SPI_MODE_1
  6. #define SPI_SCL spi_scl
  7. #define SPI_SDA spi_sda
  8. #define SPI_READ spi_read()
  9. void spi_scl(int);
  10. void spi_sda(int);
  11. unsigned char spi_read(void);
  12. #define SPI_DELAY udelay(2)
在board/nxp/lpc1788/board.c文件中加入以下内容: 

点击(此处)折叠或打开
  1. void spi_scl(int bit)
  2. {
  3. struct lpc178x_gpio_dsc dsc;
  4. dsc.port = 2;
  5. dsc.pin = 22;
  6. lpc178x_gpout_set(&dsc, bit);
  7. }

  8. void spi_sda(int bit)
  9. {
  10. struct lpc178x_gpio_dsc dsc;
  11. dsc.port = 2;
  12. dsc.pin = 27;
  13. lpc178x_gpout_set(&dsc, bit);
  14. }

  15. unsigned char spi_read(void)
  16. {
  17. struct lpc178x_gpio_dsc dsc;
  18. dsc.port = 2;
  19. dsc.pin = 26;
  20. return (unsigned char)lpc178x_gpin_get(&dsc);
  21. }
  22. <span style="font-size: 14px; line-height: 1.5;">int spi_cs_is_valid(unsigned int bus, unsigned int cs)</span>
  23. {
  24. return bus == 0 && cs == 0;
u-boot中spi flash的操作命令:
1、选择spi flash
    sf probe 0
2、擦除命令
   sf erase 0 0x210      //注意擦除长度一定是0x210的整数倍
3、读命令
    sf read addr  offset  len
4、写命令
    sf write addr offset len


参考一下内容:http://bbs.leekie.net/thread-667-1-1.html