day02 uboot、程序的烧写

回顾:
笔试题:阐述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控制器以及内部的一大堆寄存器?
                 
        。
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值