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/OMAP-L138:SPI 配置不反映奇偶校验和移位方向的变化

Guru**** 2595805 points
Other Parts Discussed in Thread: OMAP-L138

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/585080/linux-omap-l138-spi-configuration-not-reflecting-changes-to-parity-and-shift-direction

器件型号:OMAP-L138

工具/软件:Linux

您好!

我将 OMAP-L138 LCDK 与嵌入式 Linux 配合使用。  到目前为止、我已经成功地在用户空间中实现了 GPIO 和 UART、但我在 SPI 的实现方面遇到了一些问题。  我已成功实现 SPI 通信、在 SOMI 和 SIMO 短接在一起时成功读取和写入;但是、当我尝试更改配置(MSB 优先、无奇偶校验等)时、输出波形中似乎没有任何变化。

默认情况下、奇偶校验显示为"ODD Parity、LSB 优先"。  当我尝试发送"0xA0A0"时,我看到0b000001011在输出上重复两次。  在给定相同的发送缓冲器的情况下、无论配置如何、输出都不会改变。

在 Linux 中、存在以下文件:

/sys/class/spi_master/spi1存在
/sys/class/spidev/spidev1.0 /sys/class/spidev/spidev1.1存在
/sys/class/spi_master/spi1

和  

CAT /sys/class/spi_master/spi1/device/modalias

读取 platform:SPI_Davinci

我认为这意味着系统将 SPI_DaVinci 设置为控制器驱动程序、而 spidev 是协议驱动程序。  这是正确的实施/理解吗?

我对文件进行了以下更改:

Board-omapl138-lcdk.c 编辑:

//Davinci_SPI_config:
静态结构 Davinci_SPI_config da850evm_SPI_cfg ={
.wdelay= 2、
.io_type= SPI_IO_TYPE_POLL、
.c2tdelay= 8、
.t2cdelay= 8、
.paracy_enable = 0、
.odate_parity = 0、
};

//spi_board_info
静态结构 spi_board_info da850evm_spi_info[]={

.modalias="spi_Davinci"、
.controller_data=&daevm_spi_cfg、
.mode= spi_mode_0、
.max_speed_Hz= 80000、
.bus_select

= 850num、.chin = 1、850num = 1、.chie_selt = 1、850num = 1、850num
{
.modalias="SPI_DaVinci"、
.controller_data=&d850evm_SPI_cfg、
.mode= SPI_mode_0、
.max_speed_Hz= 80000、
.bus_num= 1、
.chip_select= 1、
}、
};

//spi_init
静态空 omapl138_lcdk_spi_init (void)
{
int ret;

ret = davinci_cfg_reg_list (da850_SPI1_pins);
if (ret)
pr_warn ("daopl138_lcdk_init:SPI1 mux 设置失败:%d\n"、spi_evm
);
spi_reg_size (spi_ref = 850m、spi_ref);

如果(ret)
pr_warning ("omapl138_lcdk_init:SPI 1注册失败:%d\n"、
ret);
} 

device-da8xx 更改:

//SPI 资源:
静态结构资源 da8xx_spi0_resources[]={
[0]={
.start= DA8XX_SPI0_BASE、
.end= DA8XX_SPI0_BASE + SZ_4K - 1、
.flags= IORESOURCE_MEM、
}、
[1]={
.start= DA8XX_SPIOR0_ORTS_INQ_OR_ORTS=.OR0_ORTANQ_OR_ORTS_ORTS=.ORTA_INQ_ORTS_ORTS_ORTS=.OR_ORTANT_ORTQ_OR_ORTS=.OR0_OR_ORTS_ORTS_ORTS_ORTA_INQ_OR_ORTS=.OR_ORTANT_ORTS=.ORTA_INQ_OR_ORTS=



.OR



}、
[3]={
.start= DA8XX_DMA_SPI0_TX、
.end= DA8XX_DMA_SPI0_TX、
.flags= IORESOURCE_DMA、
}、
};

静态结构资源 da8xx_SPI1_resources[]={
[0]={
.start= DA850_SPI1_base、
.end= DA850_SPI1_base + SZ_4K - 1、
.flags= IORESOURCE_MEM、
}、
[1]={
.start= IRQ_DA8XX_base + SZ_4K - 1、.flags = IORESORCE_ORE_ORT1_ORT1_ORT1_ADMEM







、}、[IRQ_INORT1_INORT1_INESOR_ORT1_ORT1_ORT1_ORT1_ORT1_ORT1_ORT1_ORT1_ENTS = IRQ_ORT1_ORT1_ORT1_ORT1_ORT1_ORT1_ORT1_ORT1_ORT1_ORT1_ORT1_OR
[3]={
.start= DA8XX_DMA_SPI1_TX、
.end= DA8XX_DMA_SPI1_TX、
.flags= IORESOURCE_DMA、
}、
};


//平台数据:
struct Davinci_SPI_platform_data da8xx_SPI_pdata[]={
[0]={
.version= SPI_version_2、
.intr_line= 1、
.dma_event_q= EVENTQ_0、
}、
[1]={
.version= SPI_version_2、
.intr_line= 1、.intr_event_q = EVENTQ_0、}




//平台器件:
静态结构 platform_device da8xx_spi_device[]={
[0]={
.name="spi_Davinci"、
.id= 0、
.num_resources= array_size (da8xx_spi0_resources)、
.resource= da8xx_spi0_resources、
.dev={
.platform_data =


}、[spi_data]
、[spi_1]、[spi_data/]= 1}、[spi_name/.data] 用于匹配驱动
程序.id= 1、
.num_resources= array_size (da8xx_SPI1_resources)、
.resource= da8xx_SPI1_resources、
.dev={
.platform_data =&da8xx_SPI_pdata[1]、
}、
}、
}; 

此外、在我的用户空间代码 ioctl (fd、SPI_IOC_RD_LSB_FIRST、&lsb)中;显示 lsb 设置为零、向我表明驱动程序认为控制器首先配置了 MSB。  由于波形看起来指示为其他状态、因此我连接了调试器(XDS100v2)并在启动用户空间代码后转储寄存器。 我找到了以下内容(在 SPI1ARM 下):

SPICGR0 = 0x00000001
SPICGR1 = 0X00000103  
SPIFMT_1 = 0X3FF7EA08

PARENA=1 (被启用)
SHIFTDIR = 1 (LSB 优先)

如果我尝试按我想要的方式手动设置这些寄存器(无奇偶校验、MSB 在前)、则当我下次停止处理器时、这些值将被复位。  这似乎表明处理器上运行的代码正在将值设置为不正确的值。

我还尝试在 SPI_Davinci.c 中的任何位置消除设置 LSB_FIRST 对波形没有影响的情况。

我是否忽略了某些内容?  外设的配置似乎应该是一个简单的操作、但事实证明它比我预期的要困难。  如果我可以提供更多信息来帮助解决此问题、请告诉我。

JLimbocker

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

    您可以在器件论坛中发帖/提问。

    此致、
    帕维尔