现在使用SPI口来读取外部SPI-Flash的信息。
首先要在raspi-config中设置IO的SPI功能,跟上一个I2C设置一样,参见
https://bbs.eeworld.com.cn/thread-506020-1-1.html
外部SPI-Flash模块为微雪电子的AT45DB041的模块。
硬件连接如图
处于简便,仅实现读取Flash芯片信息寄存器的,
代码如下:
- #include <stdio.h>
- #include <wiringPiSPI.h>
- int main(void)
- {
- int fd = wiringPiSPISetup(0, 1000000);
- if (fd < 0) {
- printf("Error Setup wiringPiSPI\n");
- exit(1);
- }
-
- unsigned char buf[5] = {0x9F, 0, 0, 0};
- wiringPiSPIDataRW(0, buf, 5);
-
- char temp[2];
- char2hex(buf[0], temp);
- printf("Manufacturer ID = %x\n", buf[1]);
- printf("DevId_1 = %x\n", buf[2]);
- printf("DevId_2 = %x\n", buf[3]);
- printf("Extended DevInfo = %x\n", buf[4]);
-
- return 0;
- }
- #define HI_HEX(x) ( ((x&0xF0)>>4) >= 10 ? (x-10+'A') : (x+'0') )
- #define LO_HEX(x) ( (x>>4) >= 10 ? (x-10+'A') : (x+'0') )
- void char2hex(char value, char hex[2])
- {
- int x = (value & 0xF0) >> 4;
- if (x >= 10) hex[1] = x - 10 + 'A';
- else hex[1] = x + '0';
-
- int y = value & 0x0F;
- if (y >= 10) hex[0] = y - 10 + 'A';
- else hex[0] = y + '0';
- }
复制代码
gcc -lwiringPi test_SPI-Flash.c -o test_SPI-Flash
编译运行后
信息读取无误!