pb5.0通过串口回应EBOOT发送的bootme问题

wsssr   2009-2-19 16:19 楼主
斑竹您好!!
  我最近在做EBOOT中的OEMPreDownload函数,由于硬件条件所限暂时先用串口3下载映象,串口1打映消息,现在已经可以通过点击target中的attach device后收到pb发出的以kitl开头的数据包,出现问题:
1:pb输出窗口出现:The Kernel Debugger is waiting to connect with target?而且pb的Download runtime image to ce device 对话框始终没有下载的样子?

2:我把pb发来的数据包打应出来后发现,包的类型始终都是0xAA,而不是我希望的0xcc??而且我的main.c文档中有包类型定义如下:请您给解释一下.
#define KS_PKT_KITL         0xAA
#define KS_PKT_DLREQ        0xBB
#define KS_PKT_DLPKT        0xCC
#define KS_PKT_DLACK        0xDD
#define KS_PKT_JUMP         0xEE

最后真诚地恳请斑竹能帮帮我,万分感谢!!!!

回复评论 (32)

第一.用串口下载nk是个很不好的想法,速度会慢的让你发指!

第二.没有网络可以考虑用USB,甚至SD卡

第三.一定要用串口的话,那就要修改eboot,我不知道你做了哪些修改,所以没办法回答你的问题。
点赞  2009-2-19 18:06
我在cepc里看到了sboot中有发数据包的程序,我就按照它的改的,现在已经可以用串口3和pb正常通讯,并受到pb发来的以kitl开头的数据包,定义如下:
typedef struct tagSERIAL_PACKET_HEADER
{
    UCHAR headerSig[HEADER_SIG_BYTES];就是这里是kITL4个字符可以收到!
    UCHAR pktType;  这里受到的是包的类型:0xAA
    UCHAR Reserved;
    USHORT payloadSize; // 这是随后收到的数据包的长度   
    UCHAR crcData;
    UCHAR crcHdr;

} SERIAL_PACKET_HEADER, *PSERIAL_PACKET_HEADER;
问题是:我已经收到了pb发来的kitl,但是包的类型不对,应该是0xDD ,而且pb的Download runtime image to ce device 窗口还是等待eboot发送bootme的样子,请斑竹赐教啊!!!

点赞  2009-2-19 18:26
这么郁闷的芯片,连一点代码都不提供?那太能锻炼人了。做工控可以考虑PXA啊,没有搞过这个,楼主独立开发个bootloader要不少时间啊。阿门,上帝保佑。
点赞  2009-2-19 21:01
再向斑竹请教:
SBOOT在下载内核的时候,不知是否也象eboot一样使用的是tftp协议?然后再以UDP包的形式发送bootme消息??
恳请斑竹赐教啊!!
谢谢!!
点赞  2009-2-20 08:51
帮顶
点赞  2009-2-20 09:00
帮顶
点赞  2009-2-20 09:00
感谢大家的支持啊!!谢谢!!
希望我的问题能早日解决
点赞  2009-2-20 09:31
你用的很么平台?
点赞  2009-2-20 10:32
ATMEL的at91sam9261
点赞  2009-2-20 10:55
串口下载用过,不过不是用PB来下,而是用SecureCRT,选XModem协议,下载nk.bin来实现。速度极其慢,5-6KB/S,32MB的nk,痛苦。

你没必要去迎合PB,本来就不建议用串口下载系统镜像的。

直接做个xmodem的下载出来,极其简单,网上到处有例程,连单片机都能做的到。省的你还要去理解kitl了。
点赞  2009-2-20 12:40
首先万分感谢shuiyan赐教!!
我有疑问:
1:用您说的SecureCRT里的Xmodem协议下载其实和我用JTAG下载nk.bin烧进flash其实是大同小仪吧,但是我做的sboot也只能作些初始化板子的工作了,当要下载映象时只需把flash里的nk.bin复制到ram中然后跳过去运行就可以了吧,不知我的理解对不对??

2:如果我上面的成立的话,但是后来的内核和驱动调试怎么办,总不能老是靠debug口打映消息吧?

3:如果要做个xmodem的下载出来,应该是还需象eboot里的tftp协议那样自己加进到sboot里吧?如果这样的话,pb需要接受到什么样的bootme 包才能响应sboot下载要求?这个和eboot里的bootme包应该不同吧??

小弟是有点迎合pb了,自己只有串口所以就老想着能够看到pb里的下载映象对话框的出现,呵呵,

还望shuiyan大哥再赐教啊,万分感谢!!
点赞  2009-2-20 13:04
招聘兼职程序员
我们公司想请人制作一个类似于“印艺印刷报价管理系统”的软件。待遇丰厚。要求人在上海,有意者请联系:qq:494862441 手机:13916673571   
点赞  2009-2-20 19:22
没有网卡可以用mass storage的方式下载,即选择下载后,插上USB,让nand flash识别成一个u盘,把nk.bin拷上去,然后内部在进行解析,写入。
点赞  2009-2-20 20:53
引用: 引用 13 楼 codewarrior 的回复:
没有网卡可以用mass storage的方式下载,即选择下载后,插上USB,让nand flash识别成一个u盘,把nk.bin拷上去,然后内部在进行解析,写入。


这个要wince起来后才行吧,我就是这么做的。关键楼主现在想启动wince吧。第一次烧写还是要的。
点赞  2009-2-20 21:10
引用: 引用 14 楼 gooogleman 的回复:
引用 13 楼 codewarrior 的回复:
没有网卡可以用mass storage的方式下载,即选择下载后,插上USB,让nand flash识别成一个u盘,把nk.bin拷上去,然后内部在进行解析,写入。


这个要wince起来后才行吧,我就是这么做的。关键楼主现在想启动wince吧。第一次烧写还是要的。

可以的。270可以设定GPIO为USB。
void InitUsb(void)
{
        unsigned udc_crA_val, udc_crB_val;
        g_pClockRegs = (volatile CLKMAN_REGS *)CLK_BASE_U_VIRTUAL;
        g_pUDCRegs = (volatile UDC_REGS *)UDC_BASE_U_VIRTUAL;

        startusb();
      
        dConfIdx=0;
        dAddress=0;
        dInterface=0;
        dSetting=0;

        g_pClockRegs->cken |= XLLP_CLKEN_USBCLIENT ;
       

        UDCCR_UDE_DISABLE( g_pUDCRegs->udc_cr );
        udc_crA_val = ( XLLP_UDC_UDCCRZ_EE | MAX_PKT_BULK_64 | EP_DIRECTION_IN
                      | EP_TYPE_BULK | EP_NUM_1 | ALTERNATE_INTERFACE_SETTING_0
                      | INTERFACE_SETTING_0 | CONFIG_NUM_1 | XLLP_UDC_UDCCRZ_DE) ;
       
        //Configure Endpoint A
        g_pUDCRegs->udc_crA = udc_crA_val;

        //Configuring Endpoint B
        //BULK OUT with max pkt size 64
        udc_crB_val = ( XLLP_UDC_UDCCRZ_EE | MAX_PKT_BULK_64 | EP_DIRECTION_OUT
                      | EP_TYPE_BULK | EP_NUM_2 | ALTERNATE_INTERFACE_SETTING_0
                      | INTERFACE_SETTING_0 | CONFIG_NUM_1 | XLLP_UDC_UDCCRZ_DE);

        //Configure Endpoint B
        g_pUDCRegs->udc_crB = udc_crB_val;

            //Enable UDE
        UDCCR_UDE_ENABLE( g_pUDCRegs->udc_cr );

        //Check for Endpoint Memory configuration error
        if (g_pUDCRegs->udc_cr & XLLP_UDC_UDCCR_EMCE)
                 EdbgOutputDebugString("** UDC Endpoint Memory configuration error **\n");


        //Enable endpoint interrupts
        //For endpoint 0, enable Packet Complete intr request and FIFO error intr request
        //For endpoints A and B, enable Packet Complete intr request.
        UDCICR0_INT_EN( g_pUDCRegs->udc_icr0, XLLP_UDC_UDCICR0_IE0_0 |
                                              XLLP_UDC_UDCICR0_IEA_0 |
                                                XLLP_UDC_UDCICR0_IEB_0);

        //Enable Reset interrupt
            UDCICR1_INT_EN( g_pUDCRegs->udc_icr1, XLLP_UDC_UDCICR1_IERS);

        //Enable Config change intr
        ENABLE_CONFIG_CHANGE_INTR(g_pUDCRegs->udc_icr1);

        // Setup default state info.
        g_EP0Status = WAIT_FOR_SETUP;
}               
点赞  2009-2-20 23:45
另外,可以用RNDIS,通过USB下载。
点赞  2009-2-20 23:46
引用: 引用 16 楼 codewarrior 的回复:
另外,可以用RNDIS,通过USB下载。


稳定吗?厉害,这个办法很牛。有空可以尝试一下。
点赞  2009-2-21 07:16
RNDIS我用过很多次了,不用担心。
插上USB线后,就把整个设备虚拟成了一个通过USB与主机相连的网卡,配置好IP地址,就能像通过以太网那样通过usb下载了。
点赞  2009-2-21 10:21
1:用您说的SecureCRT里的Xmodem协议下载其实和我用JTAG下载nk.bin烧进flash其实是大同小仪吧,但是我做的sboot也只能作些初始化板子的工作了,当要下载映象时只需把flash里的nk.bin复制到ram中然后跳过去运行就可以了吧,不知我的理解对不对??
---->下载时,不是“把flash里的nk.bin复制到ram中然后跳过去运行”,而是通过下载接口(串口、网口、USB口等等)将PC上的nk.bin下载到ram里面,下载完后,烧录到flash里面,再跳转到ram的nk的起始位置开始执行。

2:如果我上面的成立的话,但是后来的内核和驱动调试怎么办,总不能老是靠debug口打映消息吧?
---->kernel的调试可以用kitl,驱动一般还是常用插桩式的。这个跟你用什么方式下载没有关系。

3:如果要做个xmodem的下载出来,应该是还需象eboot里的tftp协议那样自己加进到sboot里吧?如果这样的话,pb需要接受到什么样的bootme 包才能响应sboot下载要求?这个和eboot里的bootme包应该不同吧??
---->通过串口的XModem是极其通用,你仔细看看bsp或许就已经有了,我们原来用的270的bsp直接就做好的。如果没有实现起来也很简单。肯定要加到sboot中去的。 因为从来不用PB下载,所以不知道该响应什么样的包。
点赞  2009-2-21 10:24
12下一页
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复