导航

    全志在线开发者论坛

    • 注册
    • 登录
    • 搜索
    • 版块
    • 话题
    • 在线文档
    • 社区主页

    DongshanPI-D1s 烧录tina linux到spinor存储器后,无法通过xfel在编程了

    MR Series
    8
    13
    5167
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • A
      abcdef LV 5 最后由 编辑

      如题,刚拿到dongshanpi-d1s的时候里面默认烧录的linux系统,在按照教程安装完驱动后,通过xfel工具可以编程例程中的执行代码到spinor存储器,但是我自己编译了tina linux烧录到spinor 存储器后,xfel可以识别设备,执行的结果似乎是正确,但是spinor存储器中的内容却没有任何变化,重启后,还是启动之前编程的tina linux,不知道是为什么,请求解答。

      S whycan 2 条回复 最后回复 回复 引用 分享 0
      • S
        story_xjj LV 5 @abcdef 最后由 编辑

        我遇到了相似的问题,不知道是什么问题,希望了解的人可以提示一下

        1 条回复 最后回复 回复 引用 分享 0
        • whycan
          whycan晕哥 LV 9 @abcdef 最后由 编辑

          @abcdef

           xfel spinor erase <address> <length>
          

          先执行擦除试一试

          1 条回复 最后回复 回复 引用 分享 0
          • baiwen
            100ask LV 6 最后由 编辑

            我们也发现了这个问题,目前怀疑是 xfel无法完整擦除 spi nor导致的错误,可以尝试先使用 凤凰烧写工具 烧写一下 这个镜像,之后再通过 xfel去下载裸机程序,就可以正常使用了!
            af143ace-307a-4a81-8b71-d1a457f8e19f-image.png
            一定要选择 为 分区擦除升级
            镜像文件: rtos_16M.img

            正常输出
            9fce2a47-2e7f-48b7-ad17-452f21d77216-image.png
            7fb6399a-ed70-466a-a264-4a5b83b36f2a-image.png

            Q 1 条回复 最后回复 回复 引用 分享 0
            • Q
              qinchangzu LV 3 @baiwen 最后由 编辑

              @baiwen 烧录img后能用xfel写入一次,之后又不可以了,裸机程序

              Q 1 条回复 最后回复 回复 引用 分享 0
              • Q
                qinchangzu LV 3 @qinchangzu 最后由 编辑

                使用xfel擦除norflash无效

                YuzukiTsuru 1 条回复 最后回复 回复 引用 分享 0
                • YuzukiTsuru
                  柚木 鉉 LV 9 @qinchangzu 最后由 编辑

                  @qinchangzu xfel的bug,有兴趣可以帮忙修复下

                  T 1 条回复 最后回复 回复 引用 分享 0
                  • T
                    tripod9 LV 5 @YuzukiTsuru 最后由 编辑

                    @yuzukitsuru https://bbs.aw-ol.com/topic/3380/d1s-meils烧录导致xfel工具烧写失效/17

                    估计是这个问题,spi nor flash 被melis代码lock了。unlock下,应该就可以解决问题

                    Q 1 条回复 最后回复 回复 引用 分享 0
                    • Q
                      qinchangzu LV 3 @tripod9 最后由 编辑

                      @tripod9 是这个原因

                      T 2 条回复 最后回复 回复 引用 分享 0
                      • T
                        tripod9 LV 5 @qinchangzu 最后由 编辑

                        @qinchangzu 打这个补丁,可以帮忙测试下,看是否解决问题了

                        diff --git a/spinor.c b/spinor.c
                        index 7a30307..8cc6e95 100644
                        --- a/spinor.c
                        +++ b/spinor.c
                        @@ -287,6 +287,85 @@ static inline int spinor_info(struct xfel_ctx_t * ctx, struct spinor_pdata_t * p
                         	return 0;
                         }
                         
                        +static inline uint8_t spinor_read_sr3(struct xfel_ctx_t * ctx, struct spinor_pdata_t * pdat)
                        +{
                        +	uint8_t tx[1];
                        +	uint8_t rx[1];
                        +
                        +	tx[0] = 0x15;
                        +	rx[0] = 0x0;
                        +	fel_spi_xfer(ctx, pdat->swapbuf, pdat->swaplen, pdat->cmdlen, tx, 1, rx, 1);
                        +	return rx[0];
                        +}
                        +
                        +static inline int spinor_global_unlock(struct xfel_ctx_t * ctx, struct spinor_pdata_t * pdat)
                        +{
                        +	uint8_t cbuf[256];
                        +	uint32_t clen = 0;
                        +	uint8_t sr3 = spinor_read_sr3(ctx, pdat);
                        +
                        +	/* spi select */
                        +	cbuf[clen++] = SPI_CMD_SELECT;
                        +	/* write enable */
                        +	cbuf[clen++] = SPI_CMD_FAST;
                        +	cbuf[clen++] = 1;
                        +	cbuf[clen++] = pdat->info.opcode_write_enable;
                        +	/* spi deselect */
                        +	cbuf[clen++] = SPI_CMD_DESELECT;
                        +
                        +	/* spi select */
                        +	cbuf[clen++] = SPI_CMD_SELECT;
                        +	/* global block/sector unlock */
                        +	cbuf[clen++] = SPI_CMD_FAST;
                        +	cbuf[clen++] = 1;
                        +	cbuf[clen++] = 0x98;
                        +	/* spi deselect */
                        +	cbuf[clen++] = SPI_CMD_DESELECT;
                        +
                        +	/* spi select */
                        +	cbuf[clen++] = SPI_CMD_SELECT;
                        +	/* wait busy */
                        +	cbuf[clen++] = SPI_CMD_SPINOR_WAIT;
                        +	/* spi deselect */
                        +	cbuf[clen++] = SPI_CMD_DESELECT;
                        +
                        +	/* spi select */
                        +	cbuf[clen++] = SPI_CMD_SELECT;
                        +	/* write enable */
                        +	cbuf[clen++] = SPI_CMD_FAST;
                        +	cbuf[clen++] = 1;
                        +	cbuf[clen++] = pdat->info.opcode_write_enable;
                        +	/* spi deselect */
                        +	cbuf[clen++] = SPI_CMD_DESELECT;
                        +
                        +	/* spi select */
                        +	cbuf[clen++] = SPI_CMD_SELECT;
                        +	/* write status 3 and clear wps bit */
                        +	cbuf[clen++] = SPI_CMD_FAST;
                        +	cbuf[clen++] = 2;
                        +	cbuf[clen++] = 0x11;
                        +	cbuf[clen++] = sr3 & ~(0x1 << 4);
                        +	/* spi deselect */
                        +	cbuf[clen++] = SPI_CMD_DESELECT;
                        +
                        +	/* spi select */
                        +	cbuf[clen++] = SPI_CMD_SELECT;
                        +	/* wait busy */
                        +	cbuf[clen++] = SPI_CMD_SPINOR_WAIT;
                        +	/* spi deselect */
                        +	cbuf[clen++] = SPI_CMD_DESELECT;
                        +
                        +	/* end */
                        +	cbuf[clen++] = SPI_CMD_END;
                        +	if(clen <= pdat->cmdlen)
                        +	{
                        +		fel_chip_spi_run(ctx, cbuf, clen);
                        +		return 1;
                        +	}
                        +	return 0;
                        +}
                        +
                        +
                         static int spinor_helper_init(struct xfel_ctx_t * ctx, struct spinor_pdata_t * pdat)
                         {
                         	uint8_t cbuf[256];
                        @@ -370,6 +449,7 @@ static int spinor_helper_init(struct xfel_ctx_t * ctx, struct spinor_pdata_t * p
                         		if(clen <= pdat->cmdlen)
                         		{
                         			fel_chip_spi_run(ctx, cbuf, clen);
                        +			spinor_global_unlock(ctx, pdat);
                         			return 1;
                         		}
                         	}
                        
                        1 条回复 最后回复 回复 引用 分享 0
                        • T
                          tripod9 LV 5 @qinchangzu 最后由 编辑

                          @qinchangzu https://github.com/xboot/xfel/commit/b49c4897f83a4d3981667b305ea0b3ce0a9eb93f

                          T 1 条回复 最后回复 回复 引用 分享 0
                          • T
                            tripod9 LV 5 @tripod9 最后由 编辑

                            @tripod9 xfel-windows-v1.3.0.7z 试试这个xfel,看是否解决问题了

                            Q 1 条回复 最后回复 回复 引用 分享 0
                            • Q
                              qinchangzu LV 3 @tripod9 最后由 编辑

                              @tripod9 目前是解锁后,再清楚状态寄存器3就好了

                              1 条回复 最后回复 回复 引用 分享 0
                              • 1 / 1
                              • First post
                                Last post

                              Copyright © 2024 深圳全志在线有限公司 粤ICP备2021084185号 粤公网安备44030502007680号

                              行为准则 | 用户协议 | 隐私权政策