SDP协议是NXP的一种用于ARM芯片烧写调试和测试时使用的标准协议,他广泛使用在除了IMX6系列的其他很多NXP公司的单片机上,你使用这个协议可以读取寄存器,写入寄存器,写入内存,读取内存,运行程序等等操作,这完全不需要其他BootLoader的支持,这是芯片的loader中自带的功能,你只需要启动模式选择串口启动,然后启动芯片就可以了,但是他不具备初始化硬件,等一些其他功能,我们必须先试用这个下载一个loader到内存,然后运行这个loader才能实现更多复杂的功能,这也是很多其他烧写器所不会告诉你的真正的他们的烧写程序的核心,其实这些在NXP的官方手册中是有写的。软件截图如下:
SDP协议支持两种通讯方式,即串口1或者usb1,usb1连接电脑后显示为一个hid设备,协议是一样的,hid设备中有4个报文,具体这些你们可以读NXP的数据手册,里面有详细介绍,我的这个工具将其中的所有功能都列出并可用,需要注意的是,HID连接方式下,发送DCD表和复制镜像功能暂时不可用,我已经联系微软正在反馈这个问题,我也不知道是为什么,反馈了快俩月了微软的工程师还没回复来着。串口连接方式下所有功能都可用,但是复制镜像时比较慢,因为串口波特率是115200,速度还是很低的。比如一个600k的镜像能花大概一分钟。
DCD表,是IMX系列的一个权益方案,芯片内部的loader在启动后,可以读取存储在imx文件中的dcd表,也可以通过sdp协议发送dcd表,loader在拿到dcd表之后,验证无误后就会对内部的寄存器根据dcd表进行一系列的配置,dcd表的构成你可以在官方文档中查到,在配置完成之后,芯片的很多外设就可以正常工作和使用了,尤其是DDR内存,不同的第三方主板制造商,比如正点原子,他们有他们自己的dcd表,因为这个表的内容与使用的硬件设备的关系密切,还和画电路板的阻抗标准等有关系,所以主板制造商使用一套自己的标准的dcd表,可以快速初始化他们的硬件设备,我的dcd表就是使用的正点原子的dcd表,通过SDP协议发送dcd表之后,DDR内存就可以正常使用了,这时你就可以使用读取寄存器命令直接读取80000040之后的地址,就是DDR内存的地址,就可以直接读取出值,当然你也可以写入,这时你可以使用下载镜像的命令将imx文件,注意,是imx文件,不是bin文件复制到DDR内存之中,然后使用调转命令来验证并运行镜像文件,如果你的镜像文件复制的地址没错,编译时的地址也没错,入口地址等IVT表也没用错误的话,那你的镜像文件就可以运行,如果其中某处出错都会导致镜像运行不成功,你需要重新来过。
跳过dcd表功能是在复制完imx镜像后,跳转并验证imx镜像时跳过执行dcd表,因为你再这之前已经执行过一次dcd,如果重复执行会导致DDR被初始化从而丢失数据导致无法运行镜像,所以这一步在跳转执行之前是必须的。
获取错误码功能,是SDP协议中获取命令执行失败后的错误编码的,一般不用,而且错误编码需要到特殊的NXP的勘误手册中查询比较麻烦,实际使用中只要命令运行没有效果即认为是运行失败,原因慢慢找吧。