uboot烧写2

回顾:
笔试题:阐述volatile关键字!
1.面试题:谈谈对嵌入式的了解
  1.1.谈谈身边常见的嵌入式产品
  1.2.嵌入式定义和特点
      举例子对比说明
      硬件依赖需求
      软件依赖硬件
      立马给出一下场景
2.场景:一块开发板,一台电脑,开发板如何运行一个软件
  2.1.明确嵌入式开发基本模式
      编辑编译在上位机
      运行在下位机
      下载用网口
      此时此刻画出一个简要的开发模式示意图
      看图解决上位机和下位机将来要做的事情
  2.2.搭建上位机的嵌入式开发环境
      安装linux系统
      安装必要的软件
      注意:软件下载利用网口,需要上位机安装配置
           tftpd-hpa网络服务
      注意:上位机的IP的配置添加过程
  2.3.下位机部署(烧写)软件 
      掌控下位机的硬件信息
      粗看
      明确三大件
      CPU
      内存
      闪存      
      明确外围接口
      多种多样,哪些需要有,哪些不需要,完全依赖用户需求
      举例子说明:手机和路由器
      切记:网口和串口必须有!
      细看
      法宝:原理图和芯片手册
      注意:具体分析哪个硬件,就看这个硬件对应的
           原理图和芯片手册
     
      总结:一旦硬件信息掌控完毕,紧接着向下位机
           正式部署软件
   
3.案例:以点亮和关闭下位机上4个LED灯为例
  3.1.获取点亮和关闭LED灯对应的软件(二进制可执行文件)
      resource.rar/day01/led.bin             
  3.2.画出操作模式图
  3.3.上位机安装配置启动tftpd-hpa网络服务
      并且给上位机添加一个静态IP地址
      具体参见day01.txt的笔记即可
  3.4.问:下位机如何提供一个客户端的软件程序呢?
      答:利用大名鼎鼎的uboot软件
      问:uboot软件在哪里呢?
      答:resource.rar/day01/ubootpak.bin
      问:软件的运行和烧写位置在哪里?
          运行在内存
          烧写到闪存(EMMC)
          结论:
          led.bin只需下载到下位机的内存并且运行即可
          ubootpak.bin不仅仅要烧写到闪存EMMC还要运行在内存上
      问:如何在下位机先运行一个uboot呢?
      答:利用TF卡
          明确下位机的启动流程:
          上电->CPU硬件上先检测SD0卡槽是否有TF卡
          ->如果有TF卡,CPU会运行TF卡的软件
          ->如果没有TF卡,CPU会运行EMMC上的软件
      问:如何向TF卡烧写一个uboot呢?
      答:实施步骤:
       1.将TF卡插入到读卡器
       2.然后将读卡器插入到上位机上
       3.运行烧写工具:
         resource.rar/tools/IROM_Fusing_ToolV2.0.rar
         解压IROM_Fusing_ToolV2.0.rar
         得到烧写程序:IROM_Fusing_Tool.exe
         运行IROM_Fusing_Tool.exe
       4.点击"Browse"指定要烧写uboot二进制文件路径
         uboot对应的二进制文件在:
         resource.rar/day01/ubootpak.bin
         选中即可
         最后点击"Add"添加即可!
       5.最后点击"Start"开始烧写,将ubootpak.bin烧写
         到TF卡上,提示“Fusing image Done”表明烧写
         成功,烧写有问题,建议将TF卡格式化!
         烧写完毕,将TF卡拔出  
       
       6.将TF卡插入到下位机的“SD0”TF卡槽中
         一旦插入,将来上电以后,CPU会自动首先到
         SD0卡槽运行TF上的uboot
         一旦uboot运行,此时此刻下位机具有了客户端的
         功能!
    
    3.5.问:下位机TF卡上的uboot一旦运行,下位机就
             具有了客户端的功能,如何直到这个uboot
             是否正常运行了呢?  
        答:uboot软件势必有打印信息,只需在上位机
            通过串口即可捕获到下位机的uboot打印信息
        
        问:上位机如何访问串口呢?
        答:上位机获取串口信息的软件如下:
            Windows:SecureCRT
            linux:kermit或者minicom
         
        问:SecureCRT如何使用呢?
        答:操作步骤
        1.先获取SecureCRT软件
          ftp://ARM/SecureCRT_CN.zip
        2.运行SecureCRT软件
          执行:SecureCRT.exe即可
        3.SecureCRT的配置如下:
         点击左上角"快速链接"->
         协议选择“Serial”
         设置串口的工作参数:
         端口:COM1(台式机是COM1)
               如果是USB转串口,到设备管理器中
               获取对应的端口号 
         波特率:115200
         数据位:8
         奇偶校验:None
         停止位:1
         将RTS/CTS前面的勾去掉
         点击连接即可
         重启开发板(或者按Reset复位键),即可
         看到下位机TF卡上uboot的运行的信息
      
      问:linux的kermit或者minicom使用
      答:操作步骤
          linux系统安装kermit
          sudo apt-get install ckermit
          配置kermit,自行百度搜索(.kermrc)
          切记:此配置文件需要指定串口的设备文件名
                获取串口在linux系统下的设备文件名的方法:
                1.将USB转转串口插入上位机的U口
                2.执行命令dmesg,获取一堆的打印信息
                  在打印信息最后会看到串口的设备文件名类似:
                  ttyUSB0或者ttyUSB1
                3.根据获取到的串口的设备文件名来
                  修改配置文件.kermrc
          启动kermit命令:
          sudo kermit -c  
          重启下位机获取复位下位机,即可看到uboot的运行信息
       
       阶段性总结:接下来要完成的事情就是:
       1.利用TF卡上的uboot来向EMMC烧写uboot
       2.利用EMMC上的uboot来下载运行led.bin
    
    3.6.熟悉uboot相关的操作命令
       1.复位下位机,看到如下信息:
         Hit any key to stop autoboot:  3 //开始倒计时
         快速按任意键,进入uboot的命令行模式
         出现"tarena#"命令行提示符
       2.掌握uboot几个常用命令
         print命令:用于打印uboot的环境变量
                    类似linux的env命令
         关注一下几个重要的环境变量:
         ipaddr=192.168.1.110 //下位机的IP地址
         serverip=192.168.1.8 //将来下位机要从哪个上位机下载文件
         
         setenv命令:设置修改环境变量
         例如:
         setenv ipaddr 192.168.1.166
         saveenv //保存环境变量到EMMC上
         
         切记:uboot在下载文件之前,记得先测试
               网络是否连通
         ping命令:下位机ping上位机
         例如:
          ping 192.168.1.8
          出现:
          ping failed; host 192.168.1.8 is not alive
          表示网络连接失败,接着各种检查!
         
          出现:
          host 192.168.1.8 is alive
          表示网络连接成功!
         
        tftp命令:用于从上位机下载文件到下位机的内存上
         此命令就是uboot的文件下载客户端软件
        切记:X6818开发板内存的基本信息如下:
         内存的容量为:1GB
         内存的起始物理地址为:0x40000000
              uboot里面的数据依赖按照16进制处理!
              
        例如:
        tftp 0x48000000 ubootpak.bin
        说明:从上位机下载ubootpak.bin文件到
             下位机的内存的起始地址为0x48000000存储空间中
        
        update_mmc命令:将内存中的数据写入到EMMC上
        例如:
        update_mmc 2 2ndboot 0x48000000 0x200 0x78000
        说明:
        2:对应下位机的EMMC
        2ndboot:就是指定要烧写uboot,指定分区名
        0x48000000:内存的起始地址
        0x200:EMMC的起始地址,此起始地址由三星规定!
        0x78000:EMMC的存储空间的大小
        结论:从内存的0x48000000开始读取数据,将
              读取到的数据写入到EMMC的0x200起始地址
              写0x78000这么大!
              注意:单位都是字节!
      
      3.7.向EMMC烧写ubootpak.bin
          实施步骤:
          0.上位机操作:
            首先将ubootpak.bin,led.bin拷贝到
            上位机linux系统的/tftpboot目录中
            并且确保上位机的tftpd-hpa已经启动!
            
          1.复位下位机,让TF卡上的uboot先运行
          2.进入uboot命令行模式执行一下命令:
            ping 192.168.1.8 //好习惯
            tftp 48000000 ubootpak.bin
            update_mmc 2 2ndboot 0x48000000 0x200 0x78000
          3.将SD0卡槽的TF卡拔出,重新复位下位机
            看EMMC上的uboot是否运行
            至此:向EMMC烧写uboot的工作完成!
            
      3.8.向下位机下载led.bin并且运行
          1.复位下位机,让TF卡上的uboot先运行
          2.进入uboot命令行模式执行一下命令:
            ping 192.168.1.8 //好习惯
            tftp 0x48000000 led.bin
            go 0x48000000 //让CPU跑到0x48000000运行led.bin
            此时此刻观察下位机的LED灯是否交替闪烁
       
        注意:如果在下载时出现各种"T T T T...."
        (T = timeout = 超时),记得重启上位机的
        tftpd-hpa网络服务即可:
        sudo service tftpd-hpa restart          


**************************************************
二.问:led.bin从何而来?
   答:
   1.明确:从硬件层面上,计算机包括两个内容:
     CPU:数据运算和控制操作外设
          CPU一天到晚都是在跟外设进行数据的通信
          数据最终来自外设
     外设:包括CPU以外的硬件设备(U盘,硬盘,闪存,内存等)
          还包括CPU内部集成的各种硬件控制器(肉眼看不到)                          
     高电平=3.3V=数字1
     低电平=接地=数字0
     IO=Input/Output=输入/输出
     输入:信号线的状态由外设影响
     输出:信号线的状态由CPU影响
     GPIO:通用目的(普通)的输入或者输出引脚
     寄存器:本质和内存一模一样,存储空间很小而已!
             可以暂时存放数据信息!
             
  2.切记:CPU访问外设都是以地址指针的形式访问
    例如:向内存地址0x40000000写入4字节数据0x55555555
    C语言代码:
    *(volatile unsigned long *)0x40000000 = 0x55555555;
    结论:切记切记:CPU要想访问某个外设,必须搞清楚
          这个外设的起始物理地址!
          
  3.问:CPU到底如何访问LED灯(外设)呢?
        实现交替闪烁呢?
    答:具体实施步骤如下
    3.1.认真分析用户的需求
        目前用户需求:LED灯交替闪烁即可
    3.2.掌控LED硬件相关的信息
        粗看:
        确认4个LED灯在开发板的位置
        注意:如果不清楚,一定咨询硬件工程师!
        
        细看:先看原理图后看芯片手册
        1.打开底板原理图:resource/硬件原理图/x6818bv2.pdf
        2.找到4个LED灯在原理图的位置
         通过原理图得到结论:
         让LED1亮,只需让对应的硬件连接线GPIOC12给低电平
         让LED1灭,只需让对应的硬件连接线GPIOC12给高电平
         问:如何让GPIOC12这根硬件连接线给高低电平呢?
         答:GPIOC12这根硬件连接线势必最终连接到CPU上
         而CPU存在于核心板上,所以再次打开核心板的原理图          
        3.打开核心板的原理图:resource/硬件原理图/x4418cv3_release20150713.pdf
         然后搜索"GPIOC12"关键字,最终得到:
         LED1对应的CPU引脚为:SA12/GPIOC12/SPITXD2/SDnRST2
         结论:LED1对应的CPU引脚具有四种复用功能:
         SA12:此引脚可以作为地址线(例如:内存)
         GPIOC12:此引脚可以作为普通的输入或者输出引脚(LED1)
         SPITXD2:此引脚可以作为SPI总线的发送数据的引脚
         SDnRST2:SD卡的Reset复位引脚
         结论:LED1对应的引脚目前应该选择为GPIOC12这种功能!
         结论:要想让LED1亮,CPU只需让GPIOC12这根引脚给低电平
               要想让LED1灭,CPU只需让GPIOC12这个引脚给高电平
               并且GPIOC12必须选择输出而不是输入!
         切记:此时此刻务必画出一个简要的硬件连接示意图
               目的是复杂的原理图简单化!
         问:CPU如何让GPIOC12输出0和1呢?
         答:CPU访问GPIOC12的操作流程:
         1.明确:CPU核不允许直接操作GPIOC12引脚
         2.CPU核通过软件编程的方式,以地址指针的
           形式访问GPIO控制器内部的大一堆寄存器即可
           本质就是CPU给GPIO控制器发送命令
         3.软件一旦操作完毕,GPIO控制器硬件上
           自动根据命令操作GPIOC12引脚
         4.一旦硬件操作GPIOC12引脚(高电平/低电平)
           最终这根硬件连接线自动影响LED1的状态
         5.结论:
           程序员最终关注的对象就是GPIO控制器以及
           内部的一大堆寄存器!
         6.此时此刻务必画出操作的示意图!
           参见:led.bmp
         
         问:CPU如何访问GPIO控制器以及内部的一大堆寄存器?
           
                       
         
                         
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值