SWIM error [30006]: Comm init error: chip does not answer

    科技2022-07-10  231

    前言

    在调试自己做的STM8S003F3P6实验板,已经调试几天了,都正常。 今天要调试一下串口1,写了测试程序。编译完,不能单步调试。 打开前几天写好能用的测试工程,也不能单步调试。 弹框后,在IAR提示区显示如下信息:

    Sat Oct 03, 2020 12:56:59: Failed to set configuration with MCU name STM8S003F3: SWIM error [30006]: Comm init error: chip does not answer

    因为我板子可能是有问题(MAX3485那块没验证呢,但是采用的成熟电路),但是不出在MCU这块,SWIM通讯是最基本的,要不咋玩啊。

    去网上查这个报错(SWIM error [30006]), 有人说到要用STVP先搞一下MCU. 这个板子打样回来后,第一次使用时,确实用 “ST Visual Programmer”和MCU通讯后,才能单步调试。

    又用“ST Visual Programmer”和MCU通讯了一次,将代码区擦掉,将编译好的hex也能烧录到MCU. 将缓冲区清成0,读回MCU代码区的内容,也能看到是烧入的编好的HEX内容。

    然后再用自己当前的测试程序单步调试,就正常了。

    估计可能是IAR和MCU通讯时的实现有bug, 导致MCU不响应调试命令。 为啥用STVP就行呢,这可能是ST没有将全部通讯协议告诉IAR厂家吧。或者IAR对通讯协议运用的细节和ST原厂不一样(e.g. 执行B指令之前,必须要先执行A指令之类的)。

    问题没真正解决

    我刚才用STVP和板子通讯上了,也用我前面写好的工程能在板子上单步调试了。 我就写另外一个测试程序,测试最后一个串口电路是否好使。 写好后,一实验,又不能单步了。这时,用STVP和前面写好的用例工程均不能和板子通讯。

    我怀疑是MCU病危了… 前面已经正常的调试了几天,今天突然有问题,虽然被STVP暂时治好了,但是MCU一定出问题了。因为我调试时,就是上个电,没干别的。

    买料时,打样是5块PCB, 我买了10个STM8S003F3P6. 开始焊了2块,有焊盘掉的情况。这次调试,是第3块板子。 其中有些料,已经没有了…, 但是现在MCU还有,不担心。 看来实验板买料,至少要备5个板子的料。其中一些不值钱的阻容,还是按照100个买比较好。 值钱的元件. e.g. MCU和其他芯片,至少也要5~10个起吧。 前几天,做的板子,我自己买料,一个STM32F407IGT6就50多RMB, 肉疼啊… 只买了3个,希望不要给我搞啥MCU坏了的情况。真的肉疼,可以理解。

    用热风枪将MCU吹下来,上了一片崭新的STM8S003F3P6, 将拆MCU时,MCU旁边误吹下来的2个电容也补焊上新电容。我为啥补焊呢,因为缺了这2个阻容,用STVP通讯,显示另外的通讯错误。

    这时,用我以前写好的用例工程,是可以单步调试的。充分说明了MCU病危了.

    但是,用我刚写好的用例工程,是不能单步调试的。这个用例工程,是我从头搭建的。 最后,通过比较好的用例工程,和我这个新建的工程,发现IAR设置中,关于STLINK的设置不同。 正确的设置如下: 不能选任何STLINK的勾选项,否则就是另外的通讯错误。 这就是IAR3.11.1的bug了,或者STM8S003F3P6内置的通讯协议升级了。导致不能和IAR3.11.1兼容。

    按理说,STLINK选项,应该选上校验啥的,要不咋能知道程序下载的是否对呢?

    我遇到的 SWIM error [30006]: 问题解决完成。

    Processed: 0.011, SQL: 8