...
Code Block |
---|
/*
* Sample application that makes use of the SPIDEV interface
* to access an SPI slave device. Specifically, this sample
* reads a Device ID of a JEDEC-compliant SPI Flash device.
*/
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <linux/types.h>
#include <linux/spi/spidev.h>
#include <stdint.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
int main(int argc, char **argv)
{
char *name;
int fd;
struct spi_ioc_transfer xfer[2];
unsigned char buf[32], *bp;
int len, status;
name = argv[1];
fd = open(name, O_RDWR);
if (fd < 0) {
perror("open");
return 1;
}
memset(xfer, 0, sizeof xfer);
memset(buf, 0, sizeof buf);
len = sizeof buf;
/*
* Send a GetID command
*/
buf[0] = 0x9f;
len = 6;
xfer[0].tx_buf = (unsigned long)buf;
xfer[0].len = 1;
xfer[1].rx_buf = (unsigned long) buf;
xfer[1].len = 6;
status = ioctl(fd, SPI_IOC_MESSAGE(2), xfer);
if (status < 0) {
perror("SPI_IOC_MESSAGE");
return -1;
}
printf("response(%d): ", status);
for (bp = buf; len; len--)
printf("%02x ", *bp++);
printf("\n");
return 0;
}
|
2.2. Effect on Related Products
...
The i.MXRT1050 EVK board.
Micron M25P32 SPI Flash Memory, as a separate chip.
Connect the SPI Flash memory via the "SD TF to TF Flexible Card Extension cable Extender Adapter" attached to the TF Card Slot
J20
. Details of those connection are as follows:
SPI Memory Signal/Function | J20 Pin# | MCU Signal | MCU PAD |
CS#/Chip Select | 5 | LPSPI1_PCS0 | GPIO_SD_B0_01 |
SCLK/Clock Input | 3 | LPSPI1_SCK | GPIO_SD_B0_00 |
SI/Serial Data Input | 7 | LPSPI1_SDO | GPIO_SD_B0_02 |
SO/Serial Data Output | 8 | LPSPI1_SDI | GPIO_SD_B0_03 |
2.8.2. Software Setup
The following software setup is required:
Download the files listed in Section: "Downloadable Files" to the top of the Linux i.MX RT installation.
Install the BSP, as per the respective "Installing and activating cross development environment" document in the "Software" section on the Emcraft site.
From the top of the Linux installation, activate the Linux cross-compile environment by running:
Code Block $ . ACTIVATE.sh
From the top of the BSP installation, go to the Linux kernel tree and install the kernel patch, eg:
Code Block $ cd linux/ $ patch -p1 < ../../linux-lpspi.patch
From the top of the Linux installation, go to the
projects
sub-directory, and patch therootfs
project:Code Block $ cd projects/ $ patch -p1 < ../../projects-lpspi.patch
Build the
rootfs
project:Code Block $ cd projects/rootfs $ make
2.9. Detailed Test Plan
2.9.1.
Anchor | ||||
---|---|---|---|---|
|
Perform the following step-wise test procedure:
Go to the
projects/rootfs
directory, build the loadable Linux image (rootfs.uImage
) and copy it to the TFTP directory on the host:Code Block $ cd projects/rootfs $ make
Boot the loadable Linux image (
rootfs.uImage
) to the target via TFTP and validate that it boots to the Linux shell:Code Block => run netboot Using ethernet@40424000 device TFTP from server 192.168.1.96; our IP address is 192.168.1.86 Filename 'imxrt1050/rootfs.uImage'. Load address: 0x80007fc0 Loading: ################################################################# ################################################################# ################################################################# ################################################################# ... / # uname Linux / #
2.9.2.
Anchor | ||||
---|---|---|---|---|
|
Perform the following step-wise test procedure:
From the Linux shell, run
dmesg
and verify that there are no error messages related to SPI or LPSPI:Code Block / # dmesg ... / # dmesg | grep spi / #
Verify that the
spi0
master is registered in thesysfs
:Code Block / # ls /sys/class/spi_master/ spi0 / #
2.9.3.
Anchor | ||||
---|---|---|---|---|
|
Replace the SD card in the SD card slot by the SPI Flash memory
M25P32
using "SD TF to TF Flexible Card Extension cable Extender Adapter".Make sure the
spidev
device exists:Code Block / # ls -l /dev/spidev0.0 crw------- 1 root root 153, 0 Jan 1 00:00 /dev/spidev0.0 / #
Make sure the
spidev_flash
application reads the correct Flash ID over SPI (first 3 bytes must be0x20
0x20
0x16
for theM25P32
Flash connected the IMXRT1050-EVK board):Code Block / # spidev_flash /dev/spidev0.0 response(7): 20 20 16 10 00 00 / #