对于长篇介绍感到抱歉,但它有助于解释问题的背景。
我一直在努力通过阅读github上发布的类似arduino的代码,更多地了解智能手表如何为其编写自定义固件。我注意到所有示例都在loop()
函数中包含以下代码:
if(digitalRead(BUTTON)) standardShutdown();
此线似乎正在监控电源按钮,如果按下该按钮,则关闭手表。不过,这引起了人们的关注。到目前为止我所理解的引导链是:当手表打开时,它开始在地址0x08000000处执行引导加载程序代码。如果USB已连接且用户在一秒钟内按下按钮,则进入dfu模式并允许下载新固件。否则,运行位于0x08040000的用户代码。
现在,如果由于程序员错误,代码进入无限循环,从不检查电源按钮也不会关闭,会发生什么?有没有办法强制重置手表(例如按住电源按钮五秒钟,按下按钮连接USB电缆或类似的组合)再次运行引导加载程序,并下载新的固件?如果没有,那么一个错误会导致手表无限循环吗?
通常情况下,我会试着看看会发生什么,但我不想看我的手表,这就是我在这里问的原因。
答案 0 :(得分:4)
如果您取下USB电源并按住按钮10秒钟,它将关闭电源(无法使用USB电源关闭电源)。神奇的恢复顺序是让手表断电并连接到USB线,但不要将USB线插入PC。现在,按下手表的电源按钮,然后将USB连接器插入PC,然后松开电源按钮。你必须在一秒钟内完成这个序列!这将使手表进入DFU模式(它的显示屏将在屏幕底部显示绿色条),现在您可以重新刷新它。
索尼的说明在这里:
也许这款手表并非一成不变,但索尼似乎做得很好,所以你通常可以恢复。