嵌入式字段中“软复位”和“硬复位”有什么区别?

时间:2012-05-08 02:48:18

标签: embedded

在我看来: 软重置:从重置向量启动。 硬重置:拉出cpu的电平。

4 个答案:

答案 0 :(得分:2)

这可以从芯片到芯片我假设。硬复位可能被认为是器件上的复位线(引脚,球等),当沿某个方向拉动时,部分或全部芯片处于复位状态。软复位可能就像分支到零或分支到复位向量一样简单,或者它可能是您写入的寄存器或寄存器中导致硬复位的位,或者可能是接近硬复位的东西,想象一下芯片内部层,硬复位击中外层,软复位可能不是整个芯片内部层。例如,你可能不想从pcie公共汽车上掉下来,所以你就别忘了。通常情况下,jtag(或其某些部分)不应通过复位触摸。当软件拉出一条重置线时,它会自行杀死,谁将释放该重置?有些东西是硬件,有很多方法可以解决这个问题,但是如果解决了一些带有数字组件的东西,那么数字部分就不应该被重置软件击中,或者你再次陷入困境而无法释放它。

答案 1 :(得分:2)

硬复位肯定意味着整个CPU芯片及其所有外设都被复位。其原因可能很多:外部复位引脚,时钟故障,片上低压检测,看门狗,非法指令陷阱等。

软复位可能意味着返回复位向量的“脏”分支,其中复位向量恢复包括堆栈在内的所有CPU核心寄存器。我会说这是非常值得怀疑的做法,我不确定它会做什么好事。主要问题是当您执行此操作时,所有MCU外围硬件寄存器都不会重置为默认值。几乎不可能不对所有这些寄存器的复位状态做出任何假设,特别是因为现在平均MCU带有1000多个寄存器。因此,这个软和&脏重置,你最有可能会出现这样的行为:

subtle intermittent bugs <= my program <= complete haywire

更加牵强,软复位可能意味着由软件引起的复位。在这种情况下,它可能会向看门狗寄存器写入错误的值以强制执行复位,或者无法刷新看门狗。或者它可能是执行非法指令。这些很可能会导致整个芯片完全复位。

答案 2 :(得分:1)

这可能意味着系统设计师想要的意思。没有通用的定义。例如,RAM的内容可以通过软复位来维持,但不能通过硬复位来维持,或者它可能只是外部硬件复位信号和软件复位指令之间的差异。

答案 3 :(得分:1)

在 Intel 平台上,软复位(将 0x4 写入端口 0xcf9)是 CPU 热复位,即 CPU 运行时的复位。热复位(将 0x6 写入端口 0xcf9)是无需重启的主机复位,硬复位(将 0xe 写入端口 0xcf9)是主机复位带有电源循环。全局重置是 Intel ME 的重置与主机重置相结合。

CPU 冷复位是在最初向 CPU 供电时断言 RESET#。 CPU 热复位是在 V_cc 和 CLK 保持在指定的操作限制内时发生 INIT#RESET#。如果您只是 INIT#,那么它只会刷新 BTB 和 TLB,并且只会初始化整数寄存器并进入重启 MSROM 例程(在 UEFI 系统上不再只是 0xFFFFFFF0)。如果您RESET#,那么它也会刷新缓存并initialises FP registers and not just the integer registers。这是寄存器的初始状态,我想在微码开始之前。如果您同时声明 INIT#RESET#,那么它也会执行 BIST。我认为在这种情况下,它重新执行了 BSP 选择过程。 MP 初始化协议,因为 BIPI is sent to all-including-self after the BIST completes,而且我认为它在没有 BIST 时也执行 BSP 选择,即在热/冷时只有 RESET#this 谈到在一个可选的 BIST 复位)。在现代英特尔 CPU 上,我认为 RESET# 是每个插槽一个并重置所有内核,并与 PCH PLTRST# 相关联,而 INIT 是由 PCH 通过 PCIe 中的 DMI 发送的 PLTRST# {3}} 事务,并逐个内核分配到 CPU 寄存器(如 QPIPNCB)中配置的指定内核。

热复位是 PCH 对许多组件的 SLP_S0# 断言,并且系统保持在 S0。在硬重置时,系统循环通过 SLP_S5#SLP_S5#,然后循环通过 SLP_S0#PLTRST# 以结束 S0 C0(当 PLTRST# 为最终无效),这将导致 DRAM 被重置,而 SLP_S0 - S5# 本身不会这样做。 SLP_S0# 高表示 CPU 处于 S0 C0。 SLP_S0# 低表示处于 S0 Cx,SLP_S3#SLP_S0# 低表示处于 S3,SLP_S3#SLP_S4# export default { components: { BCard, BButton, }, data() { return { connection: null, json: { cmd: 'start', width: 1024, height: 800, url: 'https://www.google.com', token: '', service_id: 1, thumbnail_width: 100, thumbnail_height: 100, }, } }, created() { console.log('Starting Connection to WebSocket') this.connection = new WebSocket('ws://127.0.0.1:8080/') // this.connection = new WebSocket('ws://echo.websocket.org') this.connection.onopen = function (event) { console.log(event) console.log('Success') } this.connection.onmessage = webSocketOnMSG }, methods: { sendMessage(message) { console.log(this.connection) console.log(message) console.log(JSON.stringify(message)) const dat = this.connection.send(JSON.stringify(message)) console.log('TT', dat) }, drawItem() { const img = document.createElement('img') const canvas = document.getElementById('canvasId') img.src = 'http://image...' img.onload = function (a) { const h = a.target.height const w = a.target.width const c = canvas.getContext('2d') canvas.width = w canvas.height = h c.drawImage(img, 0, 0) document.getElementById('draw-image-test').appendChild(canvas) } }, webSocketOnMSG(msg) { console.log(msg) }, }, } 低表示它在 S4 等中。

我认为冷重置是指系统从 VLW 启动,然后返回到 G3 之前的状态,可能是 DeepSx、S5 或 S4。但是您会看到人们调用 G3 and needs to go through PCH_RTCRST# and EC_RSMRST#,并且冷重置冷启动。我可能会使用硬重置和冷启动这两个术语。热启动将是 S3 恢复,而冷启动将从 S4/S5/G3 启动,也许您可​​以将所有 S4/S5 硬启动和 G3 冷启动。