轉載至:http://blog.chinaunix.net/uid-28974688-id-3842328.html
分類: LINUX
開發環境:
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的配置文件中加入以下內容:
點擊(此處)摺疊或打開
- #define CONFIG_CMD_SF
//加入cmd_sf.c文件的編譯,實現u-boot中spi flash的操作命令sf
- #define CONFIG_SOFT_SPI //加入driver/spi/soft_spi.c文件編譯,實現軟件spi總線
- #define CONFIG_SPI_FLASH //加入driver/mtd/spi/spi_flash.c文件編譯
- #define CONFIG_SPI_FLASH_ATMEL //加入driver/mtd/spi/atmel.c文件編譯,實現AT45的驅動
- #define CONFIG_SF_DEFAULT_MODE SPI_MODE_1
- #define SPI_SCL spi_scl
- #define SPI_SDA spi_sda
- #define SPI_READ spi_read()
- void spi_scl(int);
- void spi_sda(int);
- unsigned char spi_read(void);
- #define SPI_DELAY udelay(2)
點擊(此處)摺疊或打開
- void spi_scl(int bit)
- {
- struct lpc178x_gpio_dsc dsc;
- dsc.port = 2;
- dsc.pin = 22;
- lpc178x_gpout_set(&dsc, bit);
- }
- void spi_sda(int bit)
- {
- struct lpc178x_gpio_dsc dsc;
- dsc.port = 2;
- dsc.pin = 27;
- lpc178x_gpout_set(&dsc, bit);
- }
- unsigned char spi_read(void)
- {
- struct lpc178x_gpio_dsc dsc;
- dsc.port = 2;
- dsc.pin = 26;
- return (unsigned char)lpc178x_gpin_get(&dsc);
- }
- <span style="font-size: 14px; line-height: 1.5;">int spi_cs_is_valid(unsigned
int bus, unsigned
int cs)</span>
- {
- return bus == 0 && cs == 0;
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