用自制PCB,用KEIL MDK和JLINK裸奔调试F1C100S
填坑开始
第一坑 JLINK连接
第一坑拜晕哥所赐
如下图
如果只连图上4根线,那么调试时会出来如下提示,然后退出调试
连上地和电源到JLINK后,就能正常调试了
离线
第二坑 下载
由于以前一直用的是有内部FLASH的,所以调试的第一步自然是下载
对于F1C100S没有内部FLASH的,下载自然是有问题的,JLINK信息如下
Load "D:\\maojing\\hdy-radio\\1-templete\\mdk\\Objects\\templete.axf"
ProjectFile = D:\maojing\hdy-radio\1-templete\mdk\JLinkArm_debug_in_dram.ini
Info: Device "ARM7" selected (0 KB flash, 0 KB RAM).
Device = TMPA900CMXBG
Info: Device "ARM7" selected (0 KB flash, 0 KB RAM).
VTarget = 3.261V
Info: TotalIRLen = 4, IRPrint = 0x01
***JLink Warning: Identified core does not match configuration. (Found: ARM9, Configured: ARM7)
Info: CP15.0.0: 0x41069265: ARM, Architecure 5TEJ
Info: CP15.0.1: 0x1D152192: ICache: 32kB (4*256*32), DCache: 16kB (4*128*32)
Info: Cache type: Separate, Write-back, Format C (WT supported)
Info: RTCK is not connected
Info: Auto JTAG speed: 8000 kHz
Info: J-Link: ARM9 CP15 Settings changed: 52078 from 78, MMU Off, ICache Off, DCache Off
***JLink Warning: RESET (pin 15) high, but should be low. Please check target hardware.
***JLink Warning: PC of target system has unexpected value of 0xFFFF00D8 after reset.
Info: CP15.0.0: 0x41069265: ARM, Architecure 5TEJ
Info: CP15.0.1: 0x1D152192: ICache: 32kB (4*256*32), DCache: 16kB (4*128*32)
Info: Cache type: Separate, Write-back, Format C (WT supported)
DLL version V4.50l, compiled Jul 9 2012 15:02:49
Firmware: J-Link ARM V8 compiled Nov 28 2014 13:44:46
Hardware: V8.00
Hardware-Breakpoints: 2
Software-Breakpoints: 8192
Watchpoints: 0
Found 1 JTAG device, Total IRLen = 4:
Id of device #0: 0x07926F0F
ARM9 identified.
JTAG speed: 1000 kHz
Info: RTCK is not connected
Info: Auto JTAG speed: 8000 kHz
***JLink Warning: RESET (pin 15) high, but should be low. Please check target hardware.
***JLink Warning: PC of target system has unexpected value of 0xFFFF018C after reset.
Info: CP15.0.0: 0x41069265: ARM, Architecure 5TEJ
Info: CP15.0.1: 0x1D152192: ICache: 32kB (4*256*32), DCache: 16kB (4*128*32)
Info: Cache type: Separate, Write-back, Format C (WT supported)
JTAG speed: 1000 kHz
No Algorithm found for: 00000000H - 00001357H
Erase skipped!
Error: Flash Download failed - ARM926EJ-S
Info: RTCK is not connected
Info: Auto JTAG speed: 8000 kHz
Flash Load finished at 10:13:14
我知道需要下到SRAM或DRAM,但怎么下进去就不知道了
在参考了网友的例程,和网友晕哥和aozima的帮忙下,总算清楚了这个过程,填坑如下
1)在编译通过后,不需要download,直接开始debug就可以
2)如果要在SRAM中运行,那么project options需要设置如下
A)Linker tab中的Scatter file和Misc controls分别设置如下
run_in_sram.sct文件代码如下
LR_IROM1 0x00000000 { ; load region size_region
ER_IROM1 0x00000000 { ; load address = execution address
*.o (F1C100S_INIT, +First)
*(InRoot$$Sections)
.ANY (+RO)
}
RW_RAM1 +0 { ; RW_RAM1 start address is after ER_ROM1
.ANY (+RW +ZI)
}
}
B)Debug tab中的Initialization File中设置如下
run_in_sram.ini代码如下
FUNC void SET_PC_SRAM(void)
{
PC = 0x00000000;
}
SET_PC_SRAM();
C)Utilities tab设置如下
如果要运行在DRAM中,那么设置如下:
A)Linker tab中的Scatter file和Misc controls分别设置如下
run_in_dram.sct文件代码如下
LR_IROM1 0x80000000 { ; load region size_region
ER_IROM1 0x80000000 { ; load address = execution address
*.o (F1C100S_INIT, +First)
*(InRoot$$Sections)
.ANY (+RO)
}
RW_RAM1 +0 { ; RW_RAM1 start address is after ER_ROM1
.ANY (+RW +ZI)
}
}
B)Debug tab中的Initialization File中设置如下
run_in_sram.ini代码如下
FUNC void INIT_CLOCK(void)
{
int val;
//先把CPU时钟源设置为24Mhz晶振
val = _RDWORD(0x01c20050);
val &= ~(3 << 16);
val |= (1 << 16);
_WDWORD(0x01c20050, val);
//设置PLL_PERIPH(N=25,M=1) to 600Mhz
_WDWORD(0x01c20028, 0x80041800);
//设置AHB/APB/HCLKC的工作频率 200MHz/100MHz
_WDWORD(0x01c20054, 0x00003180);
//开启DRAM的front-end和back-end的DCLK门
_WDWORD(0x01c20100, 0x05000000);
//配置PLL_CPU的值408MHz
_WDWORD(0x01c20000, 0x80001000);
//把CPU时钟源设置为PLL_CPU
val = _RDWORD(0x01c20050);
val &= ~(3 << 16);
val |= (2 << 16);
_WDWORD(0x01c20050, val);
}
FUNC void INIT_DRAM(void)
{
int val;
//初始化DRAM
val = _RDWORD(0x01c20824);
val |= (7 << 12);
_WDWORD(0x01c20824, val);
//设置DRAM时钟 156MHz
_WDWORD(0x01c20020, 0x80100c00);
//开启DRAM时钟
val = _RDWORD(0x01c20060);
val |= (1 << 14);
_WDWORD(0x01c20060, val);
//DRAM软件复位失效
val = _RDWORD(0x01c202c0);
val |= (1 << 14);
_WDWORD(0x01c202c0, val);
//设置DRAM参数
_WDWORD(0x01c01000, 0x0001318a); //f1c100s设置
//_WDWORD(0x01c01000, 0x0001338a); //f1c200s设置
val = _RDWORD(0x01c0100c);
val &= ~(7 << 6);
val |= ((4 << 6) | (1 << 0));
_WDWORD(0x01c0100c, val);
}
FUNC void SET_PC_DRAM(void)
{
PC = 0x80000000;
}
INIT_CLOCK();
INIT_DRAM();
SET_PC_DRAM();
现在能正常在SRAM和DRAM中调试了
在此感谢@晕哥和@aozima的帮助
离线
帖子不错,没看到你的板子呀,还有哪些坑?继续观望
离线
帖子质量非常高,非常不错,不过帖子有个小笔误,最后一段ini代码上面的文字应该是run_in_dram.ini代码如下,帖子写成(run_in_sram.ini代码如下)。 最后有个小建议,如果能够把JLINK的信号名称和板子连接的IO口用文字描述出来就更好了。帖子贴出的JLINK和板子的连接图看得不是太清楚,比如没看懂CLK连接的是E6还是E7
离线
厉害,我用IAR,倒腾了一晚上,也没搞定。
离线
jlink可否直接把固件下载到spi flash
离线
问一下,如果焊接这spiflash,而且里面有程序,也可以正常进入ddr中调试吗
离线
jlink的电源是接vref到板子的3.3吗
离线
地线肯定要接的, 不接地址, 就没有 相对电平的.
离线
跟着上面的步骤做,我在keil下的工程中使用的freertos,仿真时一直开在abort handler中,这个怎么解决呢
离线
我之前也是J LINK调试. 但是一中断就无法继续执行. 我来试试你的初始化
离线
请问mdk版本是多少,为啥我的Linker tab和你的不一样,工程可以正常编译了。
离线
按照你的方式,能直接下载到SPI FLASH中吗?按照社区帖子,我试了好多方式,都没有反应!出坑困难啊!
离线
我怎么启动调试提示 Error: Target DLL has been cancelled. Debugger aborted ! ,这是什么原因
离线