找回密码
 立即注册

QQ登录

只需一步,快速开始

SPI_Flash Execution Problem

查看数: 445 | 评论数: 6 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2024-3-17 19:08

正文摘要:

本帖最后由 yonggo 于 2024-3-19 21:11 编辑 管理員好,各位神人好,想請問一下 我透過新唐提供的https://github.com/OpenNuvoton/MA35D1_RTP_BSP, 裡面的MA35D1_RTP_BSP/SampleCode/StdDriver/SPI_Flash, 我的 ...

回复

高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则

回复 qwang 发表于 2024-3-20 13:42:35
看起来是卡在   // wait tx finish
    while(SPI_IS_BUSY(SPI_FLASH_PORT));
请确认一下TFA dts里SSPCC的设置
是否spi0有分配给subm
回复 yonggo 发表于 2024-4-1 22:12:30
qwang 发表于 2024-3-20 13:42
看起来是卡在   // wait tx finish
    while(SPI_IS_BUSY(SPI_FLASH_PORT));
请确认一下TFA dts里SSPCC的 ...

感謝回覆,已解決所有問題。
1. 改完<SPI0_SUBM>後,要重新make arm-trusted-firmware-rebuild。(buildroot環境)
2. A35與M4不能共同持有SPI0的使用權,如果要使用M4 SPI的話,需要將linux-custom中的ma35d1.dtsi中的spi0狀態改為disable。
回复 yonggo 发表于 2024-3-30 00:00:02
本帖最后由 yonggo 于 2024-3-30 00:20 编辑
yonggo 发表于 2024-3-29 23:56
目前执行SPI_Flash.elf仍卡在此while()中,
uint16_t SpiFlash_ReadMidDid(void) {
    ...

我在spi.c中的SPI_Open()函数的else判断式:
else {
    spi->CLKDIV=(spi->CLKDIV & (~SPI_CLKDIV_DIVIDER_Msk)) | (u32Div<<SPI_CLKDIV_DIVIDER_Pos);
    u32RetValue=(u32ClkSrc/(u32Div + 1U));
    printf("u32Div=%u\n", u32Div);
    printf("spi->CLKDIV=%u\n", spi->CLKDIV);
}
得到u32Div=17,spi->CLKDIV=0,无法写入spi相關寄存器
写入spi相關寄存器需要設定嗎
回复 yonggo 发表于 2024-3-29 23:56:09
qwang 发表于 2024-3-20 13:42
看起来是卡在   // wait tx finish
    while(SPI_IS_BUSY(SPI_FLASH_PORT));
请确认一下TFA dts里SSPCC的 ...

目前执行SPI_Flash.elf仍卡在此while()中,
uint16_t SpiFlash_ReadMidDid(void) {
    ...
    while(!SPI_GET_RX_FIFO_EMPTY_FLAG(SPI_FLASH_PORT))
    {
        printf("receiving RX data...\n");
        u8RxData[u8DataCnt++]=SPI_READ_RX(SPI_FLASH_PORT);
    }
}
回复 yonggo 发表于 2024-3-29 23:50:17
感谢回覆, 已在/home/user/buildroot/MA35D1_Buildroot/output/build/arm-trusted-firmware-custom/fdts/ma35d1.dtsi中sspcc module加入SPI0_SUBM如下:
sspcc: sspcc@404F0000 {
    compatible="nuvoton,ma35d1-sspcc";
    reg=<0x0 0x404F0000 0x0 0x1000>;
    config=<UART0_TZNS>,
        ...
        <SPI0_SUBM>;
};
新唐MCU