This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] Linux/OMAP3530:如何通过 SPI 将数据传输到 M25P128?

Guru**** 2589280 points
Other Parts Discussed in Thread: OMAP3530, DM3730

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/589107/linux-omap3530-how-can-i-transfer-data-to-m25p128-through-spi

器件型号:OMAP3530
主题中讨论的其他器件: DM3730

工具/软件:Linux

软件:Linux-2.6.32  

硬件:OMAP3530 BeagleBoard

如何为 SPI 功能配置 GPIO_14/GPIO_15/GPIO_17/GPIO_21?

GPIO 与 M25P128-VMF6T (storeurage) SPI 闪存连接。

现在我的 Linux 具有/dev/spidev3.1的器件节点、但我无法通过 SPI 将数据传输到 M25P128。

我的步骤:

#include 

#include 
#include 
#include 
#include 
#include 
#include 
#include 

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

#define GPIO99_LOW 0x6004 
#define GPIO99_HIGH0x6005 

#define SOFT_ware_SIZE (1024) 

int main (int argc、char * argv[]){ 
int fd_mtd、fd_tt、fd_new_soft; 
内径尺寸、转塔; 
int val = 0x01; 
char data[SOFT_ware_SIZE]={0}; 
char buff [SOFT_ware_SIZE]={0}; 

静态 uint8_t 模式; 
静态 uint8_t 位= 8; 
静态 uint32_t 速度= 50000; 


如果((FD_MTD =开路("/dev/spidev3.1、O_RDWR))=-1){ 
Perror ("/dev/spidev3.1 "); 
返回-1; 


如果((ioctl (fD_MTD、SPI_IOC_RD_MODE、&MODE))=-1){ 
printf ("无法获取 SPI rd_mode \n"); 
关闭(FD_MTD); 
返回-1; 
如果((ioctl (fD_MTD、SPI_IOC_WR_MODE、&MODE))=-1){ 
printf ("无法设置 SPI ww_mode \n"); 
关闭(FD_MTD); 
返回-1; 




memset (data、8、soft_ware_size); 
printf (“写入 data =%d……” ...\n"、data[512]); 

int i = 0; 
while (1){ 
对于(I = 0;I < 128;I++){ 
如果((size = write (fD_MTD、data、SOFT_ware_size))< 0){ 
printf ("无法写入 SPI \n"); 
关闭(FD_MTD); 
返回-1; 
printf ("写入大小=%d \n"、大小); 
lseek (FD_MTD、(I + 1)* 1024、seek_set); 
lseek (FD_MTD、0、seek_set); 
I = 0; 

返回0; 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的用户4935125:

    第一步是检查 u-boot 和 Linux 内核中是否为 SPI3正确配置了 pinmux。 默认情况下、这些引脚配置为 ETK_Dx。 在./u-boot/board/ti/beagle/beagle.h 中搜索引脚是否配置为 ETK_Dx、如下所述(引脚多路复用模式 M3):
    MUX_VAL (CP (ETK_D0_ES2)、(IEN | PTU | DIS | M3)/* HSUSB1_DATA0*/\
    MUX_VAL (CP (ETK_D1_ES2)、(IEN | PTU | DIS | M3)/* HSUSB1_Data1*/\
    MUX_VAL (CP (ETK_D3_ES2)、(IEN | PTU | DIS | M3)/* HSUSB1_DATA7*/\
    MUX_VAL (CP (ETK_D7_ES2)、(IEN | PTU | DIS | M3)/* HSUSB1_DATA3*/\
    将引脚复用模式更改为 M1:
    MUX_VAL (CP (ETK_D0_ES2)、(IEN | PTU | DIS | M1)/* mcspi3_Simo*/\
    MUX_VAL (CP (ETK_D1_ES2)、(IEN | PTU | DIS | M1)/* mcspi3_SOMI*/\
    MUX_VAL (CP (ETK_D3_ES2)、(IEN | PTU | DIS | M1)/* mcspi3_clk*/\
    MUX_VAL (CP (ETK_D7_ES2)、(IEN | PTU | DIS | M1)/* mcspi3_CS1*/\

    BR
    Tsvetolin Shulev
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 TI:

    非常感谢您的帮助!
    我的问题已经解决,我有一些疑问。
    GPIO_14/15/17/21作为 Mode4运行,但我的 mcspi3仍正常工作。

    在哪里可以下载用于 BeagleBoard 的 OMAP3530的 Linux 内核?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    以下是 TI 最新的官方 OMAP3530/dm3730 Linux 版本:
    www.ti.com/.../linuxdvsdk-dm37x

    BR
    Tsvetolin Shulev