使用myir的开发板进行spi通信。 问题:spi1和spi5在debug模式下都可以正常接收数据. emmc模式下以固件形式加载则spi5可以正常通信,使用spi1则无法接收到数据。 之后屏蔽掉spi1的a7节点,开启(或不开启)m4_spi1的节点依然无法进行通信。 问题点:两个spi在debug模式下或者在a核下生成节点再去读写节点进行spi通信都可以正常通信。spi5无论a核下有无对应spi节点以及开启或不开启m4_spi5节点都可以正常通信。spi1无论a核下有无对应spi节点,以及开启或不开启m4_spi1节点都不能通信。(前提:有节点的情况下a核没有去执行读写操作)。 在关闭a7的spi1节点后,在emmc模式下将其对应的gpioz0-gpioz3节点导出并设置为输入中断成功(确认没有其他资源使用这些gpio) m核和a核之间也可以正常进行通信。 附件为设备树与测试demo |
spi1.zip
下载4.38 MB, 下载次数: 10, 下载积分: ST金币 -1
keil安装pack中提示Encountered an improper argument. 如何解决
STM32MP135DAF7系列运行DDR_Init_A7死机,调试发现是DDR初始化出错。
classB自检库上面没有MP1系列的范例,有针对MP1系列的自检解决方案或是应用笔记吗?
stm32cubide搜索不到.h文件里的文本
stm32cubeide-boot loader跳转APP异常问题
我用过stm32cubemax 但是我给stm32cubeide整服了
stm32mp135怎么只烧录bootfs,根文件系统保持不变?
L9663驱动开发
STM2cubeide使用Freertos v2提示错误问题
SPI 通信,既有单字节数据传输,又有多字节数据传输,该如正确使用 DMA?
我修改了TF内的stm32mp15xx-ya157c.dtsi内的CLK_SPI2S1_PLL3Q为CLK_SPI2S1_PLL4P(CubeIDE内的tf时钟定义为此)后,使用HAL_SPI_Receive函数接收,出现了一段时间spi1Flag==HAL_OK一段时间又为error的情况,另外接收成功的情况下打印数据发现接收到的数据并不正确。此外spi5虽然能够成功接收,但是使用dma传输的情况下发现使用同样的m4程序(spi5速度调到最大),debug模式可以成功触发接收完成中断但是数据不对(降低速度后可以接收到正确的数据),a7加载m4启动的情况下可以成功触发接收完成中断并且数据正确。但是两者接收完成的时间相差了30us。
我在正点原子的stm32mp157上进行了测试,使用其原厂镜像发现spi1一样无法接收成功。修改其tf内的CLK_SPI2S1_PLL3Q为CLK_SPI2S1_PLL4P后spi1可以正常进行使用。但是在myir的stm32mp157上做了同样的修改却存在问题。
在spi1不接任何外设的情况下,debug模式下接收都是0000,在emmc模式下,tf做了同样的修改,正点原子的现象与debug模式一样一直是接收成功,且值为0000,而myir的开发板打印如下,虽然有接收成功的打印出现了(未修改则全为error),但其值却不对,我不确定是两者的内核不同导致的还是硬件差异的原因
而且另外一个问题,将PH5设为gpio中断,spi5用软件控制即把pf6设置为gpio输出后就无法配置spi5(提示映射冲突)。stm32mp157芯片。你可以用mx配置看一下
资源分配冲突的可能性比较大。
可以参考ST官方firmware下的spi例子,这里面即是使用的SPI1通讯。
对应设备树文件为stm32mp157c-ev1-m4-examples.dts
\STM32Cube\Repository\STM32Cube_FW_MP1_V1.5.0\Projects\STM32MP157C-DK2\Examples\SPI
我现在有两块板子,一块是myir的开发板,一块是自己的开发板,用到核心板都是myir的157,只是底板不一样。我将spi1的输入和输出短接,使用相同的镜像核测试elf文件,得到的结果如下图(emmc模式),我不知道底板不同是否会对环回测试有影响,但是可以看出自己的板子存在超过正常的时间的情况
myir环回测试(自己的板子单独m4核debug模式也为此图)
自己的环回测试
我使用spi1进行回环测试,在同样的镜像和同样的elf文件的情况下,从myir借过来的开发板可以接收到正常数据,且接收的时间一直是10几us,但是我们改了底板的板子却出现了接收时间为几百ms的情况(超长接收时间打印的数据结果是正确的,1000次大概400次超长时间,其余时间为10几us)。
我认为底板不同镜像也应该做出相应的裁剪,我将myir的镜像放到百问网的开发板上(百问网也是使用的myir的核心板),发现超过正常接收时间的情况也很多,使用百问网的镜像则超过正常时间的次数要少很多但依然存在,说明百问网的镜像裁剪并没有裁剪到位,另外将myir的内核中的wlan节点屏蔽掉之后,ifconfig -a查看发现wlan节点没有了,此时在myir的开发板上也会超时。
我把myir的wifi节点关掉之后 ,ifconfig 可以看到已经没有了wlan这个节点,此时spi1在myir的板子上也会出现超时的现象。查看发现它和spi1所使用的时钟均为pll4p,我将tf内的sdmmc3(wifi节点名)的时钟关掉问题依然存在。lsmod可以看到cfg80211这个节点,我查了一下这似乎是个与wifi相关的器件,我想关闭节点并没有让内核不去加载这个驱动。去掉蓝牙节点内核启动依然有Starting Bluetooth service...的打印。应该还需要修改启动的文件,让其不去启动这些服务。不知道我的理解对不对。
具体应该怎样去做,我把内核里无关的节点都屏蔽了,还是不行。