最近需要用树莓派2B
自带的SPI
接口调试CYPRESS
的FM25W256-GTR
芯片,这里记录一下整个的调试过程。首先是打开树莓派2B
自带的SPI
接口,默认情况下,这个接口是关闭的。
在树莓派2B
系统的Shell
中执行
1 |
$ sudo raspi-config |
然后一步一步,按照下图所示的操作
完成后重启树莓派2B
。
对于希望自动脚本配置的情况,可以执行如下命令来实现上面的功能:
1 2 3 4 5 6 7 8 9 |
#启用内核模块 $ sudo sed -i "s/^#dtparam=spi=on/dtparam=spi=on/g" /boot/config.txt #如果需要python开发的话,需要手动安装spidev $ sudo apt-get install python-pip $ sudo pip install spidev $ sudo reboot |
管脚接线参考树莓派2B GPIO针脚定义中的定义,连接对应的管脚。
树莓派的管脚
19
(GPIO10
->SPI_MOSI
),21
(GPIO9
->SPI_MISO
),23
(GPIO11
->SPI_CLK
)构成了一个SPI
接口,片选信号使用GPIO
控制。
片选信号可选管脚
24
(GPIO08
->SPI_CE0_N
),26
(GPIO9
->SPI_CE1_N
)。
下面的代码初始化第一个SPI
,因此需要连接24
(GPIO08
->SPI_CE0_N
)。
片选管脚不可接地,目前测试,接地后,数据操作异常。
调试代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
import spidev spi = spidev.SpiDev() spi.open(0, 0) #1MHz spi.max_speed_hz = 1*1000*1000 #spi.mode = 0b01 FM25W256_CMD_READ = 3 FM25W256_CMD_WRITE = 2 FM25W256_CMD_WRITE_EN = 6 def readByte(addr): msb = addr >> 8 lsb = addr & 0xFF # if read n bytes we need write n bytes useless values,used for keep clock # val = spi.xfer2([FM25W256_CMD_READ,msb,lsb,0x00,0x00]) read two bytes val = spi.xfer2([FM25W256_CMD_READ,msb,lsb,0x00]) # first three bytes is useless ,because we begin receive 3 bytes before chip send real data,first three data must be 0 return val[3:] def writeByte(addr,val): msb = addr >> 8 lsb = addr & 0xFF spi.xfer2([FM25W256_CMD_WRITE_EN]) spi.xfer2([FM25W256_CMD_WRITE,msb,lsb,val]) writeByte(0,0x55) byte = readByte(0) print('%#x'%byte[0]) |
上面的代码,用spi.xfer
替换spi.xfer2
也是可以正常工作的。
有条件的情况下,建议使用官方提供的CY15FRAMKIT-001-kit
开发板来调试FM25W256-GTR
芯片。开发板如下图:
但是上面的开发板经常缺货,而且明显偏贵。便宜点的解决方法是购买一个W25Qxx
的开发板,比如W25Q128
,然后直接替换板上的芯片即可。只是需要注意的是,由于W25Qxx
板上的电阻偏大,导致芯片的电压偏低,因此不能使用3.3V
的电压,而应该使用5V
的电压供电。
FM25W256-GTR
文档