请选择 进入手机版 | 继续访问电脑版
查看: 1913|回复: 9

[求助] 飞凌版本I.MX RT1052 RT-Thread norflash 读写

[复制链接]
  • TA的每日心情

    2021-3-26 23:31
  • 签到天数: 1 天

    [LV.1]初来乍到

    2

    主题

    4

    帖子

    0

    新手上路

    Rank: 1

    积分
    34
    最后登录
    2021-7-20
    发表于 2021-3-26 22:36:21 | 显示全部楼层 |阅读模式
    使用的板子是飞凌出的OK1052 16M/32M 版本的板子,最近一直在调试飞凌提供的rtthread版本的代码,因后期项目上需要做软件升级,因为飞凌rtthread版本的未提供flexspi_norflash.c 的驱动,仅提供了裸机版本的,裸机版本已验证,可以使用,但是rtthread版本的一直都不行。

    尝试按裸机的分散加载文件来修改rtthread版本的分散加载文件,将flexspi_norflash.o 和 fsl_flexspi.o 加载到内部SRAM下运行,但是程序这边在读取flash的id是可以的,到擦写这一步,代码就死在那里了

    以下是分散加载文件的代码,烧录去掉了config_flash 和 ivt ,因为使用了飞凌提供的iap_bootloader,直接从flash的0x60008000加载代码。

    1. #include "rtconfig.h"

    2. #if (defined(RT_USING_SDRAM_16M))
    3.   #define m_text_start                   0x60002000
    4.   #define m_text_size                    0x003FE000
    5. #else
    6.         /* iap download */
    7.         #define m_interrupts_start             0x60008000
    8.         #define m_interrupts_size              0x00000400

    9.         #define m_text_start                   0x60008400
    10.         #define m_text_size                    0x01FFDC00
    11.   
    12. #endif       

    13. #define m_data_start                   0x20000000
    14. #define m_data_size                    0x00020000


    15. #if (defined(RT_USING_SDRAM_16M))       
    16.   #define m_ncache_start                 0x80800000
    17.   #define m_ncache_size                  0x00800000
    18. #else
    19. #define m_ncache_start                 0x81800000
    20. #define m_ncache_size                  0x00200000
    21. #endif
    22.        
    23. /* Sizes */
    24. #if (defined(__stack_size__))
    25.   #define Stack_Size                   __stack_size__
    26. #else
    27.   #define Stack_Size                   0x1000
    28. #endif

    29. #if (defined(__heap_size__))
    30.   #define Heap_Size                    __heap_size__
    31. #else
    32.   #define Heap_Size                    0x0400
    33. #endif


    34. #define RTT_HEAP_SIZE (m_data_size-ImageLength(RW_m_data)-ImageLength(ARM_LIB_HEAP)-ImageLength(ARM_LIB_STACK))

    35. ; load region size_region
    36. LR_IROM1 m_interrupts_start m_text_start+m_text_size-m_interrupts_size
    37. ;LR_IROM1 m_text_start m_text_size
    38. {   
    39.         VECTOR_ROM m_interrupts_start FIXED m_interrupts_size { ; load address = execution address
    40.                 * (RESET,+FIRST)
    41.         }

    42.     ER_m_text m_text_start m_text_size ; load address = execution address
    43.     {
    44.         * (InRoot$Sections)
    45.         .ANY (+RO)
    46.     }
    47.   
    48.     RW_m_data m_data_start m_data_size-Stack_Size-Heap_Size ; RW data
    49.     {
    50.         .ANY (+RW +ZI)
    51.                 flexspi_norflash.o (+RO +RW +ZI)
    52.                 fsl_flexspi.o (+RO +RW +ZI)
    53.     }
    54.    
    55.     ARM_LIB_HEAP +0 EMPTY Heap_Size{}   ; Heap region growing up
    56.     ARM_LIB_STACK +0 EMPTY Stack_Size{} ; Stack region growing down
    57.     RTT_HEAP +0 EMPTY RTT_HEAP_SIZE{}

    58.     ; ncache RW data
    59.     RW_m_ncache m_ncache_start m_ncache_size
    60.     {
    61.         * (NonCacheable.init)
    62.         * (NonCacheable)
    63.     }
    64.   ITCM 0x400 0xFBFF {
    65.                 ;drv_flexspi_hyper.o(+RO)
    66.                 ;fsl_flexspi.o(+RO)1
    67.                 * (*CLOCK_DisableClock)
    68.                 * (*CLOCK_ControlGate)
    69.                 * (*CLOCK_EnableClock)
    70.                 * (*CLOCK_SetDiv)
    71.                 * (itcm)
    72.         }
    73. }
    复制代码
    1. \ | /
    2. - RT -     Thread Operating System
    3. / | \     4.0.1 build Mar 26 2021
    4. 2006 - 2019 Copyright by rt-thread team
    5. using armcc, version: 5060750
    6. build time: Mar 26 2021 22:23:44
    7. msh />[I/SDIO] SD card capacity 7749632 KB.
    8. [I/SDIO] probe mmcsd block device!
    9. found part[0], begin: 4194304, size: 7.396GB
    10. File System initialized!
    11. Vendor ID: 0x17 ; Manufacturer ID: 0xef
    复制代码

    附main下的操作,程序卡死在NOR_FLASH_Erase
    1. NorFlash_Config();       
    2.         NOR_FLASH_Erase(0x8000,0x1000);
    复制代码
    1. void NOR_FLASH_Erase(uint32_t app_base_addr,uint32_t imageSize)
    2. {
    3.         uint16_t i;
    4.         uint32_t sectorNum = imageSize/4096;
    5.         for(i=0;i<(sectorNum+1);i++)
    6.         {
    7.            status_t status = flexspi_nor_flash_erase_sector(EXAMPLE_FLEXSPI,app_base_addr+i*SECTOR_SIZE);
    8.            if (status != kStatus_Success)
    9.            {
    10.                         rt_kprintf("Erase_Sector faild!\n");
    11.            }
    12.   }
    13.        
    14. }
    复制代码

    求助啊
    回复

    使用道具 举报

    该用户从未签到

    648

    主题

    6301

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    19540
    最后登录
    2024-3-28
    发表于 2021-3-29 14:13:24 | 显示全部楼层
    从你的表述,代码本身在裸机上跑是没有任何问题的,但是现在与RT-thread结合时有问题,我猜测是否与认为的heap空间不足或任务切换过程有关,你可以多些测试。
    回复 支持 1 反对 0

    使用道具 举报

  • TA的每日心情

    2021-3-26 23:31
  • 签到天数: 1 天

    [LV.1]初来乍到

    2

    主题

    4

    帖子

    0

    新手上路

    Rank: 1

    积分
    34
    最后登录
    2021-7-20
     楼主| 发表于 2021-3-26 22:41:54 | 显示全部楼层
    这个是能正常运行的裸机的flash函数接口的map文件
    1. i.FLEXSPI_CheckAndClearError             0x2000003c   Section        0  fsl_flexspi.o(i.FLEXSPI_CheckAndClearError)
    2.     i.FLEXSPI_ConfigureDll                   0x20000094   Section        0  fsl_flexspi.o(i.FLEXSPI_ConfigureDll)
    3.     FLEXSPI_ConfigureDll                     0x20000095   Thumb Code   118  fsl_flexspi.o(i.FLEXSPI_ConfigureDll)
    4.     i.FLEXSPI_DriverIRQHandler               0x20000110   Section        0  fsl_flexspi.o(i.FLEXSPI_DriverIRQHandler)
    5.     i.FLEXSPI_GetBusIdleStatus               0x20000128   Section        0  fsl_flexspi.o(i.FLEXSPI_GetBusIdleStatus)
    6.     FLEXSPI_GetBusIdleStatus                 0x20000129   Thumb Code    30  fsl_flexspi.o(i.FLEXSPI_GetBusIdleStatus)
    7.     i.FLEXSPI_GetDefaultConfig               0x20000146   Section        0  fsl_flexspi.o(i.FLEXSPI_GetDefaultConfig)
    8.     i.FLEXSPI_GetInstance                    0x200001dc   Section        0  fsl_flexspi.o(i.FLEXSPI_GetInstance)
    9.     i.FLEXSPI_Init                           0x200001fc   Section        0  fsl_flexspi.o(i.FLEXSPI_Init)
    10.     i.FLEXSPI_ReadBlocking                   0x2000041c   Section        0  fsl_flexspi.o(i.FLEXSPI_ReadBlocking)
    11.     i.FLEXSPI_SetFlashConfig                 0x200004f4   Section        0  fsl_flexspi.o(i.FLEXSPI_SetFlashConfig)
    12.     i.FLEXSPI_SoftwareReset                  0x2000067c   Section        0  fsl_flexspi.o(i.FLEXSPI_SoftwareReset)
    13.     FLEXSPI_SoftwareReset                    0x2000067d   Thumb Code    22  fsl_flexspi.o(i.FLEXSPI_SoftwareReset)
    14.     i.FLEXSPI_TransferAbort                  0x20000692   Section        0  fsl_flexspi.o(i.FLEXSPI_TransferAbort)
    15.     i.FLEXSPI_TransferBlocking               0x200006a4   Section        0  fsl_flexspi.o(i.FLEXSPI_TransferBlocking)
    16.     i.FLEXSPI_TransferHandleIRQ              0x20000776   Section        0  fsl_flexspi.o(i.FLEXSPI_TransferHandleIRQ)
    17.     i.FLEXSPI_UpdateLUT                      0x200008e8   Section        0  fsl_flexspi.o(i.FLEXSPI_UpdateLUT)
    18.     i.FLEXSPI_WriteBlocking                  0x2000093c   Section        0  fsl_flexspi.o(i.FLEXSPI_WriteBlocking)
    19.     i.FlexSPI_Init                           0x200009d4   Section        0  flexspi_norflash.o(i.FlexSPI_Init)
    20.     i.NOR_FLASH_Erase                        0x20000b88   Section        0  flexspi_norflash.o(i.NOR_FLASH_Erase)
    21.     i.NOR_FLASH_Write                        0x20000bb4   Section        0  flexspi_norflash.o(i.NOR_FLASH_Write)
    22.     i.NorFlash_Config                        0x20000c50   Section        0  flexspi_norflash.o(i.NorFlash_Config)
    23.     i.NorFlash_Erase_Sector                  0x20000c58   Section        0  flexspi_norflash.o(i.NorFlash_Erase_Sector)
    24.     NorFlash_Erase_Sector                    0x20000c59   Thumb Code    36  flexspi_norflash.o(i.NorFlash_Erase_Sector)
    25.     i.NorFlash_Read                          0x20000cc0   Section        0  flexspi_norflash.o(i.NorFlash_Read)
    26.     i.NorFlash_Write                         0x20000cd8   Section        0  flexspi_norflash.o(i.NorFlash_Write)
    27.     i.NorFlash_Write_NoCheck                 0x20000d94   Section        0  flexspi_norflash.o(i.NorFlash_Write_NoCheck)
    28.     NorFlash_Write_NoCheck                   0x20000d95   Thumb Code    70  flexspi_norflash.o(i.NorFlash_Write_NoCheck)
    29.     i.NorFlash_Write_PageProgram             0x20000ddc   Section        0  flexspi_norflash.o(i.NorFlash_Write_PageProgram)
    30.     NorFlash_Write_PageProgram               0x20000ddd   Thumb Code    60  flexspi_norflash.o(i.NorFlash_Write_PageProgram)
    31.     i.SCB_DisableDCache                      0x20000e40   Section        0  flexspi_norflash.o(i.SCB_DisableDCache)
    32.     SCB_DisableDCache                        0x20000e41   Thumb Code   150  flexspi_norflash.o(i.SCB_DisableDCache)
    33.     i.flexspi_nor_flash_erase_sector         0x20000ee0   Section        0  flexspi_norflash.o(i.flexspi_nor_flash_erase_sector)
    34.     i.flexspi_nor_flash_page_program         0x20000f44   Section        0  flexspi_norflash.o(i.flexspi_nor_flash_page_program)
    35.     i.flexspi_nor_get_vendor_id              0x20000fa0   Section        0  flexspi_norflash.o(i.flexspi_nor_get_vendor_id)
    36.     i.flexspi_nor_get_winbond_id             0x20000fde   Section        0  flexspi_norflash.o(i.flexspi_nor_get_winbond_id)
    37.     i.flexspi_nor_wait_bus_busy              0x2000101c   Section        0  flexspi_norflash.o(i.flexspi_nor_wait_bus_busy)
    38.     i.flexspi_nor_write_enable               0x2000106e   Section        0  flexspi_norflash.o(i.flexspi_nor_write_enable)
    复制代码


    这个是移植后的map文件
    1. itcm                                     0x00000510   Section        0  fsl_flexspi.o(itcm)
    2.     FLEXSPI_SoftwareReset                    0x00000db3   Thumb Code    16  fsl_flexspi.o(itcm)
    3.     FLEXSPI_GetBusIdleStatus                 0x00000dc3   Thumb Code    24  fsl_flexspi.o(itcm)
    4.     itcm                                     0x00000de8   Section        8  fsl_flexspi.o(itcm)
    5.     s_flexspiIrqs                            0x00000de8   Data           2  fsl_flexspi.o(itcm)
    6.     s_flexspiClock                           0x00000dea   Data           2  fsl_flexspi.o(itcm)
    7.     s_flexspiBases                           0x00000dec   Data           4  fsl_flexspi.o(itcm)
    8.     i.FlexSPI_Init                           0x2000005c   Section        0  flexspi_norflash.o(i.FlexSPI_Init)
    9.     i.NOR_FLASH_Erase                        0x20000178   Section        0  flexspi_norflash.o(i.NOR_FLASH_Erase)
    10.     i.NorFlash_Config                        0x200001c4   Section        0  flexspi_norflash.o(i.NorFlash_Config)
    11.     i.flexspi_nor_flash_erase_sector         0x200001c8   Section        0  flexspi_norflash.o(i.flexspi_nor_flash_erase_sector)
    12.     i.flexspi_nor_get_vendor_id              0x20000220   Section        0  flexspi_norflash.o(i.flexspi_nor_get_vendor_id)
    13.     i.flexspi_nor_get_winbond_id             0x20000254   Section        0  flexspi_norflash.o(i.flexspi_nor_get_winbond_id)
    14.     i.flexspi_nor_wait_bus_busy              0x20000288   Section        0  flexspi_norflash.o(i.flexspi_nor_wait_bus_busy)
    15.     .constdata                               0x200002c4   Section      244  flexspi_norflash.o(.constdata)
    复制代码
    求助啊
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    难过
    2021-4-22 14:35
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    11

    主题

    101

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    256
    最后登录
    2022-9-21
    发表于 2021-4-7 17:37:12 | 显示全部楼层
    楼主大哥,我最近也在做iap升级,能否分享点资料,代码,xx
    天天改不完的ebug呀,,,,有木有。。。。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    10

    主题

    40

    帖子

    0

    注册会员

    Rank: 2

    积分
    147
    最后登录
    2023-7-27
    发表于 2021-4-13 09:47:11 | 显示全部楼层
    中断问题吧

    1 简单粗暴,进行Flash操作时,关掉所有中断。
    2 复杂一点,不能关的中断全部放到RAM,中断向量表也要放到ram.
    3 os的中断有点复杂,把调度锁住,不进行调度。

    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    4

    帖子

    0

    新手上路

    Rank: 1

    积分
    32
    最后登录
    2021-4-27
    发表于 2021-4-14 12:44:15 | 显示全部楼层
    gossipboy 发表于 2021-4-7 17:37
    楼主大哥,我最近也在做iap升级,能否分享点资料,代码,xx

    飞凌版本的资料中就有带iap的升级demo
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    4

    帖子

    0

    新手上路

    Rank: 1

    积分
    32
    最后登录
    2021-4-27
    发表于 2021-4-14 12:46:23 | 显示全部楼层
    huangxuejia-292 发表于 2021-4-13 09:47
    中断问题吧

    1 简单粗暴,进行Flash操作时,关掉所有中断。

    这个os调度的问题也考虑了,我这边是把main线程的优先级提到最高,然后再main中直接执行flash相关操作,还是不能解决问题
    中断的问题倒是没有考虑,没有进行关中断
    把中断放到RAM中运行,这个倒也没有尝试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    难过
    2021-4-22 14:35
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    11

    主题

    101

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    256
    最后登录
    2022-9-21
    发表于 2021-4-14 13:43:20 | 显示全部楼层
    taozefeng1 发表于 2021-4-14 12:44
    飞凌版本的资料中就有带iap的升级demo

    能共享以下资料吗?我找不到飞凌版本的资料
    天天改不完的ebug呀,,,,有木有。。。。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    4

    帖子

    0

    新手上路

    Rank: 1

    积分
    32
    最后登录
    2021-4-27
    发表于 2021-4-15 14:15:35 | 显示全部楼层
    gossipboy 发表于 2021-4-14 13:43
    能共享以下资料吗?我找不到飞凌版本的资料

    给个邮箱吧,我把这个demo发给你
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    难过
    2021-4-22 14:35
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    11

    主题

    101

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    256
    最后登录
    2022-9-21
    发表于 2021-4-16 13:48:56 | 显示全部楼层
    taozefeng1 发表于 2021-4-15 14:15
    给个邮箱吧,我把这个demo发给你

    1541446514@qq.com,十分感谢!!!
    天天改不完的ebug呀,,,,有木有。。。。
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-3-28 22:12 , Processed in 0.145348 second(s), 28 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表