|
楼主 |
发表于 2016-10-13 16:53:58
|
显示全部楼层
人人都能拿到jlink v9的bootloader
http://www.amobbs.com/thread-5653964-1-1.html
(出处: amoBBS 阿莫电子论坛)
- bool jlinkCommandReadEmulatorMemory(HANDLE readPipeFile, HANDLE writePipeFile, uint32_t address, uint32_t length, void* dataBuffer)
- {
- uint8_t commandBuffer[9] =
- {
- 0xfe,
- static_cast<uint8_t>(address), static_cast<uint8_t>(address >> 8), static_cast<uint8_t>(address >> 16), static_cast<uint8_t>(address >> 24),
- static_cast<uint8_t>(length), static_cast<uint8_t>(length >> 8), static_cast<uint8_t>(length >> 16), static_cast<uint8_t>(length >> 24),
- };
- return jlinkSendCommand(readPipeFile, writePipeFile, commandBuffer, sizeof(commandBuffer), dataBuffer, length);
- }
复制代码
这就是关键命令了,id=0xfe,读取jlink自身的内存区域,命令id之后是4个字节的地址,然后是4个字节的长度,都是le格式。
在使用这个命令的时候要注意,jlink有缓冲区大小限制,我们不能一次发送太多的数据到jlink,
我们也不能一次读取太多的数据,这个缓冲区限制大小是64k,我们也可以使用下面两个函数获取这个值。
- uint8_t bootloader[0xb700] = {0};
- jlinkCommandReadEmulatorMemory(readPipeFile, writePipeFile, 0x08000000, sizeof(bootloader), bootloader);
复制代码
|
|