OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6544|回复: 8

使用uboot的mmc命令操作eMMC.写入数据失败

[复制链接]

2

主题

5

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2019-8-21
在线时间
6 小时
发表于 2019-12-26 21:34:53 | 显示全部楼层 |阅读模式
实验内容:
开机启动uboot,使用命令:tftp 80800000 u-boot.imx下载uboot,然后通过命令: mmc write 80800000 2 67c00将下载的uboot写入SD/eMMC中。然后调整拨码开关,选择SD/eMMC启动。按复位键重启板子。
实验现象:
(1)使用SD卡执行以上操作能够正常更新uboot,操作步骤如下:
U-Boot 2016.03 (Dec 26 2019 - 18:53:05 +0800)                                    <<<<<<<<<<<<<<<<<<<<<<<<<更新前的uboot

CPU:   Freescale i.MX6ULL rev1.1 69 MHz (running at 396 MHz)
CPU:   Industrial temperature grade (-40C to 105C) at 49C
Reset cause: POR
Board: MX6ULL ALPHA EMMC
I2C:   ready
DRAM:  512 MiB
MMC:   FSL_SDHC: 0, FSL_SDHC: 1
*** Warning - bad CRC, using default environment

Display: ALPHA_LCD_7 (1024x600)
Video: 1024x600x24
In:    serial
Out:   serial
Err:   serial
switch to partitions #0, OK
mmc0 is current device
Net:   FEC1
Normal Boot
Hit any key to stop autoboot:  0
=> tftp 80800000 u-boot.imx                                                                           <<<<<<<<<<<<<<<<<<<<<<<<<tftp下载uboot
FEC1 Waiting for PHY auto negotiation to complete.... done
Using FEC1 device
TFTP from server 192.168.0.108; our IP address is 192.168.0.199
Filename 'u-boot.imx'.
Load address: 0x80800000
Loading: #############################
         2 MiB/s
done
Bytes transferred = 424960 (67c00 hex)
=> mmc write 80800000 2 67c00                                                                   <<<<<<<<<<<<<<<<<<<<<<<<<向eMMC的第2个扇区写数据

MMC write: dev # 0, block # 2, count 424960 ... 424960 blocks written: OK       <<<<<<<<<<<<<<<<<<<<<<<<<写入数据成功
=> reset                                                                                                     <<<<<<<<<<<<<<<<<<<<<<<<<重启
resetting ...


U-Boot 2016.03 (Dec 26 2019 - 21:05:10 +0800)                                          <<<<<<<<<<<<<<<<<<<<<<<<<更新后的uboot

CPU:   Freescale i.MX6ULL rev1.1 69 MHz (running at 396 MHz)
CPU:   Industrial temperature grade (-40C to 105C) at 50C
Reset cause: WDOG
Board: MX6ULL ALPHA EMMC
I2C:   ready
DRAM:  512 MiB
MMC:   FSL_SDHC: 0, FSL_SDHC: 1
*** Warning - bad CRC, using default environment

Display: ALPHA_LCD_7 (1024x600)
Video: 1024x600x24
In:    serial
Out:   serial
Err:   serial
switch to partitions #0, OK
mmc0 is current device
Net:   FEC1
Normal Boot
Hit any key to stop autoboot:  0

==================================================================
(2)使用eMMC执行以上操作,则不能更新uboot,操作如下:
U-Boot 2016.03-g9bd38ef (Oct 23 2019 - 09:31:47 +0800)                             <<<<<<<<<<<<<<<<<<<<<<<<<更新前的uboot

CPU:   Freescale i.MX6ULL rev1.1 69 MHz (running at 396 MHz)
CPU:   Industrial temperature grade (-40C to 105C) at 48C
Reset cause: POR
Board: MX6ULL 14x14 EVK
I2C:   ready
DRAM:  512 MiB
MMC:   FSL_SDHC: 0, FSL_SDHC: 1
Display: ATK-LCD-7-1024x600 (1024x600)
Video: 1024x600x24
** Unrecognized filesystem type **
Error: no valid bmp image at 88000000
In:    serial
Out:   serial
Err:   serial
switch to partitions #0, OK
mmc1(part 0) is current device
Net:   FEC1
Normal Boot
Hit any key to stop autoboot:  0
=> tftp 80800000 u-boot.imx                                                                        <<<<<<<<<<<<<<<<<<<<<<<<<tftp下载uboot
FEC1 Waiting for PHY auto negotiation to complete... done
Using FEC1 device
TFTP from server 192.168.0.108; our IP address is 192.168.0.199
Filename 'u-boot.imx'.
Load address: 0x80800000
Loading: #############################
         2.3 MiB/s
done
Bytes transferred = 424960 (67c00 hex)
=> mmc dev 1 0                                                                                        <<<<<<<<<<<<<<<<<<<<<<<<<确定操作的是eMMC
switch to partitions #0, OK
mmc1(part 0) is current device
=> mmc write 80800000 2 67c00                                                                <<<<<<<<<<<<<<<<<<<<<<<<<向eMMC的第2个扇区写数据

MMC write: dev # 1, block # 2, count 424960 ... 424960 blocks written: OK    <<<<<<<<<<<<<<<<<<<<<<<<<写入数据成功
=> reset                                                                                                  <<<<<<<<<<<<<<<<<<<<<<<<<重启
resetting ...


U-Boot 2016.03-g9bd38ef (Oct 23 2019 - 09:31:47 +0800)                         <<<<<<<<<<<<<<<<<<<<<<<<<重启后还是原来的uboot

CPU:   Freescale i.MX6ULL rev1.1 69 MHz (running at 396 MHz)
CPU:   Industrial temperature grade (-40C to 105C) at 51C
Reset cause: WDOG
Board: MX6ULL 14x14 EVK
I2C:   ready
DRAM:  512 MiB
MMC:   FSL_SDHC: 0, FSL_SDHC: 1
*** Warning - bad CRC, using default environment

Display: ATK-LCD-7-1024x600 (1024x600)
Video: 1024x600x24
** Unrecognized filesystem type **
Error: no valid bmp image at 88000000
In:    serial
Out:   serial
Err:   serial
switch to partitions #0, OK
mmc1(part 0) is current device
Net:   FEC1
Error: FEC1 address not set.

Normal Boot
Hit any key to stop autoboot:  0


求助:
请问大家有没有遇到过这个问题?是怎么解决的。。。。。。。。。

1.png
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

5

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2019-8-21
在线时间
6 小时
 楼主| 发表于 2019-12-26 22:15:34 | 显示全部楼层
纠正上面错误内容:mmc write 80800000 2 67c00写入时,写入的块数不应该是0x67c00,而应该是0x33E。(0x67c00是数据大小,单位byte.命令的参数是需要写入的块数,一个块512byte,所以块数应该是0x7c00/512 = 0x33E)
回复 支持 反对

使用道具 举报

2

主题

5

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2019-8-21
在线时间
6 小时
 楼主| 发表于 2019-12-26 22:35:09 | 显示全部楼层
问题以解决:
(1)使用eMMC时,执行mmc write 80800000 2 33E前,先先执行mmc dev 1 1命令;将数据写入分区1,而不是分区0。执行过程如下:
U-Boot 2016.03 (Dec 26 2019 - 22:05:13 +0800)                          
CPU:   Freescale i.MX6ULL rev1.1 69 MHz (running at 396 MHz)
CPU:   Industrial temperature grade (-40C to 105C) at 48C
Reset cause: WDOG
Board: MX6ULL ALPHA EMMC
I2C:   ready
DRAM:  512 MiB
MMC:   FSL_SDHC: 0, FSL_SDHC: 1
*** Warning - bad CRC, using default environment

Display: ALPHA_LCD_7 (1024x600)
Video: 1024x600x24
In:    serial
Out:   serial
Err:   serial
switch to partitions #0, OK
mmc1(part 0) is current device
Net:   FEC1
Normal Boot
Hit any key to stop autoboot:  0
=> tftp 80800000 u-boot.imx
FEC1 Waiting for PHY auto negotiation to complete... done
Using FEC1 device
TFTP from server 192.168.0.108; our IP address is 192.168.0.199
Filename 'u-boot.imx'.
Load address: 0x80800000
Loading: #############################
         2.1 MiB/s
done
Bytes transferred = 424960 (67c00 hex)
=> mmc dev 1 1
switch to partitions #1, OK
mmc1(part 1) is current device
=> mmc write 80800000 2 33e

MMC write: dev # 1, block # 2, count 830 ... 830 blocks written: OK
=> reset
resetting ...


U-Boot 2016.03 (Dec 26 2019 - 22:26:01 +0800)

CPU:   Freescale i.MX6ULL rev1.1 69 MHz (running at 396 MHz)
CPU:   Industrial temperature grade (-40C to 105C) at 49C
Reset cause: WDOG
Board: MX6ULL ALPHA EMMC
I2C:   ready
DRAM:  512 MiB
MMC:   FSL_SDHC: 0, FSL_SDHC: 1
*** Warning - bad CRC, using default environment
(2)如果不小心将eMMC的分区0的前2个块写数据(这两个块时MBR存放分区表)了。可以使用mfgtool工具向emmc烧录一次系统。即可恢复分区表。
回复 支持 反对

使用道具 举报

2

主题

46

帖子

0

精华

初级会员

Rank: 2

积分
145
金钱
145
注册时间
2016-11-7
在线时间
26 小时
发表于 2020-2-9 16:23:51 | 显示全部楼层
zhaoguangxin 发表于 2019-12-26 22:35
问题以解决:
(1)使用eMMC时,执行mmc write 80800000 2 33E前,先先执行mmc dev 1 1命令;将数据写入分 ...

我mmc dev 1 0切换到分区0也是写入了uboot,但重启后还是老的uboot,但为什么是写入分区1呢,手册上也没写,不知为什么
回复 支持 反对

使用道具 举报

9

主题

890

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
2390
金钱
2390
注册时间
2019-9-25
在线时间
397 小时
发表于 2020-3-1 21:24:06 | 显示全部楼层

回帖奖励 +2 金钱

本帖最后由 仰望星空之云 于 2020-3-1 21:27 编辑
hejiang177 发表于 2020-2-9 16:23
我mmc dev 1 0切换到分区0也是写入了uboot,但重启后还是老的uboot,但为什么是写入分区1呢,手册上也没 ...

烧录完了再执行指令 mmc partconf 1 1 0 0
微信图片_20200301212601.png


回复 支持 反对

使用道具 举报

9

主题

767

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
5274
金钱
5274
注册时间
2019-9-25
在线时间
433 小时
发表于 2020-3-2 12:18:14 | 显示全部楼层
hejiang177 发表于 2020-2-9 16:23
我mmc dev 1 0切换到分区0也是写入了uboot,但重启后还是老的uboot,但为什么是写入分区1呢,手册上也没 ...

实际上是mmc dev 1 0分区的,烧写到emmc后,还需要加使能emmc boot分区的指令,才可以烧写成功。
  1. mmc partconf 1 1 0 0
复制代码

但是为什么 在mmc 1 1处能烧写成功这个还不太清楚。理论是按我上面的操作就可以烧写到emmc 0分区了。
想思考的时候,有时还可以用屁股,QQ 1252699831
回复 支持 反对

使用道具 举报

26

主题

1538

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6379
金钱
6379
注册时间
2015-8-25
在线时间
1004 小时
发表于 2020-3-2 13:09:32 | 显示全部楼层
茂茂2019 发表于 2020-3-2 12:18
实际上是mmc dev 1 0分区的,烧写到emmc后,还需要加使能emmc boot分区的指令,才可以烧写成功。

但是 ...

你好,
mmc partconf 1 1 0 0
上面这句的几个参数的意思能解释下不?
我网上搜过了:
mmc partconf dev boot_ack boot_partition partition_access
第一个参数是指设备,写1是指emmc
第二个参数是指BOOT_ACK,写1是指Boot acknowledge send during boot operation bit,大概是boot时发送应答,写0是不应答
第三个参数是指boot partition enable,写0是指使能part 0吗
第四个参数是指partition access,写0是默认值,具体是说No access to boot partition
He who fights with monsters should look to it that he himself does not become a monster, when you gaze long into the abyss, the abyss also gazes into you.
过于执着就会陷入其中,迷失自己,困住自己。
回复 支持 反对

使用道具 举报

9

主题

767

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
5274
金钱
5274
注册时间
2019-9-25
在线时间
433 小时
发表于 2020-3-2 14:54:54 | 显示全部楼层
这个就是uboot中的mmc指令,输入mmc ?就是出来你上面的英文解释。boot partition 是指使能哪个分使能0分区啊
你上面的解释加上这个基本就是这个指令的解释了
想思考的时候,有时还可以用屁股,QQ 1252699831
回复 支持 反对

使用道具 举报

0

主题

12

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2021-8-29
在线时间
12 小时
发表于 2021-9-4 15:11:27 | 显示全部楼层
有人解决这个遗留问题吗?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-25 17:52

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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