树莓派2B调试SPI接口

最近需要用树莓派2B自带的SPI接口调试CYPRESSFM25W256-GTR芯片,这里记录一下整个的调试过程。首先是打开树莓派2B自带的SPI接口,默认情况下,这个接口是关闭的。

在树莓派2B系统的Shell中执行

$ sudo raspi-config

然后一步一步,按照下图所示的操作

完成后重启树莓派2B

对于希望自动脚本配置的情况,可以执行如下命令来实现上面的功能:

#启用内核模块
$ 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针脚定义中的定义,连接对应的管脚。

树莓派的管脚

19GPIO10->SPI_MOSI),21GPIO9->SPI_MISO),23GPIO11->SPI_CLK)构成了一个SPI接口,片选信号使用GPIO控制。

片选信号可选管脚

24GPIO08->SPI_CE0_N),26GPIO9->SPI_CE1_N)。

下面的代码初始化第一个SPI,因此需要连接24GPIO08->SPI_CE0_N)。

片选管脚不可接地,目前测试,接地后,数据操作异常。

调试代码如下:

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的电压供电。

W25Q128的开发板如下图:

SpiDev文档

FM25W256-GTR文档

参考链接


发布者

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注