{"id":40523,"date":"2024-12-17T18:10:00","date_gmt":"2024-12-18T00:10:00","guid":{"rendered":"https:\/\/flex.com\/resources\/should-dc-dc-firmware-be-accessible-to-users"},"modified":"2026-03-19T11:58:23","modified_gmt":"2026-03-19T16:58:23","slug":"should-dc-dc-firmware-be-accessible-to-users","status":"publish","type":"resource","link":"https:\/\/flex.com\/zh\/resources\/should-dc-dc-firmware-be-accessible-to-users","title":{"rendered":"DC\/DC\u56fa\u4ef6\u662f\u5426\u5e94\u8be5\u5bf9\u7528\u6237\u5f00\u653e\uff1f"},"content":{"rendered":"<div id=\"overscroll-top\" style=\"background-color: #eaeef4;\"><\/div>\n<div class=\"resource-header block\">\n\t<div class=\"container\">\n\t\t<div class=\"breadcrumb\">\n\t\t\t<a title=\"Homepage\" href=\"\/\">Flex<\/a>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 384 512\"><path d=\"M365.3 256l-22.6 22.6-192 192L128 493.3 82.7 448l22.6-22.6L274.7 256 105.4 86.6 82.7 64 128 18.7l22.6 22.6 192 192L365.3 256z\"\/><\/svg>\n\t\t\t<a title=\"Resources\" href=\"\/resources\">Resources<\/a>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 384 512\"><path d=\"M365.3 256l-22.6 22.6-192 192L128 493.3 82.7 448l22.6-22.6L274.7 256 105.4 86.6 82.7 64 128 18.7l22.6 22.6 192 192L365.3 256z\"\/><\/svg>\n\t\t\t<a title=\"Should DC\/DC firmware be accessible to users?\">Should DC\/DC firmware be accessible to users?<\/a>\n\t\t<\/div>\n\t\t<h1>Should DC\/DC firmware be accessible to users?<\/h1>\n\t\t\t\t<div class=\"separator\"><\/div>\n\t\t<div class=\"details\">\n\t\t\t\t\t\t\t\t\t<div class=\"date detail\">\n\t\t\t\tPosted on<br>\n\t\t\t\t17 12 \u6708, 2024\t\t\t<\/div>\n\t\t\t\t\t\t<div class=\"categories\">\n\t\t\t\t<div class=\"categories-wrapper\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"cat-tag\">Blog<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"cat-tag\" data-cat-level=\"2\" data-destination=\"\/industries\/communications#resources\" href=\"\/industries\/communications#resources\">Communications<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"cat-tag\" data-cat-level=\"3\" data-destination=\"https:\/\/flex.com\/industries\/data-center?subcategories=data-center-power#resources\" href=\"https:\/\/flex.com\/industries\/data-center?subcategories=data-center-power#resources\">Data Center Power<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"cat-tag\" data-cat-level=\"3\" data-destination=\"\/industries\/industrial?subcategories=power#resources\" href=\"\/industries\/industrial?subcategories=power#resources\">Power<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"cat-tag\" data-cat-level=\"2\" data-destination=\"\/power-modules#resources\" href=\"\/power-modules#resources\">Power Modules<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t<\/div>\n<\/div>\n\n\n\n<div class=\"sidebar block normal-sidebar\">\n\t<div class=\"container\">\n\t\t<div class=\"content\">\n\t\t\t\n\n<h2 class=\"wp-block-heading has-medium-font-size\" id=\"h-introduction\" style=\"font-style:normal;font-weight:600\">Introduction<\/h2>\n\n\n\n<p>Providing access to firmware code is a sensitive issue in any product. In the automotive industry, for example, drivers of the latest car models expect regular over-the-air (OTA) updates to improve functionality and fix bugs. To enhance security, these updates rely on Trusted Platform Module technology and secure crypto-processors to prevent unintended changes, tampering, or the installation of malicious code.<\/p>\n\n\n<div id=\"id_69d8f3a1e9c16\" class=\"media block\">\n\t<div class=\"container media-center \">\n\t\t<div class=\"media\" style=\"left: 0px; min-width: 100%; max-width: 100%;\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"image none\">\n\t\t\t\t\t\t\t<img decoding=\"async\" alt=\"Close up view of a computer circuit board featuring a CPU\" src=\"https:\/\/flex.com\/wp-content\/uploads\/2025\/09\/A-close-up-view-of-a-computer-circuit-board-featuring-a-central-processing-unit-CPU-surrounded-by-various-electronic-components-and-intricate-wiring-1200x673.jpg\" title=\"\">\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t<\/div>\n\t\n\t<script>\n\t(function () {\n\t\tlet hasRun_id_69d8f3a1e9c16 = false;\n\t\tfunction updateVideoDisplay_id_69d8f3a1e9c16() {\n\t\t\tconst youtubeVideoId = \"\";\n\t\t\tconst bynderID = \"\";\n\t\t\tconst mediaType = \"image\";\n\t\t\tconst mediaVideoElement = document.getElementById('media-video-id_69d8f3a1e9c16');\n\t\t\tconst bodyClass = document.body.className || '';\n\t\t\tconst match = bodyClass.match(\/translatepress-([a-z]{2})(?:_[A-Z]{2})?\/i);\n\t\t\tconst currentLanguage = match ? match[1].toLowerCase() : 'en';\n\t\t\tconst isChineseLang = currentLanguage === 'zh';\n\t\t\tconsole.log('isChineseLang:', isChineseLang);\n\t\t\tconsole.log('Language detected:', currentLanguage);\n\t\t\tconst isValidYouTube = youtubeVideoId && \/^[A-Za-z0-9_-]{11}$\/.test(youtubeVideoId);\n\t\t\t\n\t\t\tif (!mediaVideoElement || mediaType !== \"video\") return;\n\t\t\tmediaVideoElement.innerHTML = ''; \/\/ Clear existing content\n\t\t\t\n\t\t\tlet videoSourceClass = 'fallback-error';\n\t\t\t\n\t\t\tif (isChineseLang) {\n\t\t\t\tif (bynderID) {\n\t\t\t\t\tvideoSourceClass = 'bynder';\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (isValidYouTube) {\n\t\t\t\t\tvideoSourceClass = 'youtube';\n\t\t\t\t} else if (bynderID) {\n\t\t\t\t\tvideoSourceClass = 'bynder';\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t\/\/ Apply layout class (used in SCSS)\n\t\t\tmediaVideoElement.className = 'video ' + videoSourceClass;\n\t\t\n\t\t\t\/\/ CASE: Chinese language\n\t\t\tif (isChineseLang) {\n\t\t\t\tif (bynderID) {\n\t\t\t\t\t\/\/ Load Bynder\n\t\t\t\t\tif (!document.getElementById('bynder-widgets-js')) {\n\t\t\t\t\t\tconst script = document.createElement('script');\n\t\t\t\t\t\tscript.src = 'https:\/\/d8ejoa1fys2rk.cloudfront.net\/bynder-embed\/latest\/bynder-embed.js';\n\t\t\t\t\t\tscript.id = 'bynder-widgets-js';\n\t\t\t\t\t\tscript.setAttribute('data-account-url', 'https:\/\/brandcenter.flex.com');\n\t\t\t\t\t\tscript.setAttribute('data-language', 'zh');\n\t\t\t\t\t\tdocument.body.appendChild(script);\n\t\t\t\t\t}\n\t\t\n\t\t\t\t\tconst bynderDiv = document.createElement('div');\n\t\t\t\t\tbynderDiv.id = 'bynder-id_69d8f3a1e9c16';\n\t\t\t\t\tbynderDiv.className = 'video-bynder';\n\t\t\t\t\tbynderDiv.setAttribute('data-bynder-widget', 'video-item');\n\t\t\t\t\tbynderDiv.setAttribute('data-media-id', bynderID);\n\t\t\t\t\tmediaVideoElement.appendChild(bynderDiv);\n\t\t\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tif (typeof BynderEmbed !== 'undefined' && typeof BynderEmbed.load === 'function') {\n\t\t\t\t\t\t\tBynderEmbed.load();\n\t\t\t\t\t\t}\n\t\t\t\t\t}, 500);\n\t\t\t\t} else {\n\t\t\t\t\t\/\/ No Bynder = error (even if YouTube is valid)\n\t\t\t\t\tshowVideoError();\n\t\t\t\t}\n\t\t\n\t\t\t\/\/ CASE: Not Chinese\n\t\t\t} else {\n\t\t\t\tif (isValidYouTube) {\n\t\t\t\t\tconst iframe = document.createElement('iframe');\n\t\t\t\t\tiframe.id = 'youtube-id_69d8f3a1e9c16';\n\t\t\t\t\tiframe.className = 'video-youtube';\n\t\t\t\t\tiframe.src = 'https:\/\/www.youtube.com\/embed\/' + youtubeVideoId + '?rel=0';\n\t\t\t\t\tiframe.frameBorder = '0';\n\t\t\t\t\tiframe.playsInline = true;\n\t\t\t\t\tiframe.allow = 'encrypted-media';\n\t\t\t\t\tiframe.allowFullscreen = true;\n\t\t\t\t\tmediaVideoElement.appendChild(iframe);\n\t\t\t\t} else if (bynderID) {\n\t\t\t\t\t\/\/ Load Bynder (fallback if no YouTube)\n\t\t\t\t\tif (!document.getElementById('bynder-widgets-js')) {\n\t\t\t\t\t\tconst script = document.createElement('script');\n\t\t\t\t\t\tscript.src = 'https:\/\/d8ejoa1fys2rk.cloudfront.net\/bynder-embed\/latest\/bynder-embed.js';\n\t\t\t\t\t\tscript.id = 'bynder-widgets-js';\n\t\t\t\t\t\tscript.setAttribute('data-account-url', 'https:\/\/brandcenter.flex.com');\n\t\t\t\t\t\tscript.setAttribute('data-language', currentLanguage);\n\t\t\t\t\t\tdocument.body.appendChild(script);\n\t\t\t\t\t}\n\t\t\n\t\t\t\t\tconst bynderDiv = document.createElement('div');\n\t\t\t\t\tbynderDiv.id = 'bynder-id_69d8f3a1e9c16';\n\t\t\t\t\tbynderDiv.className = 'video-bynder';\n\t\t\t\t\tbynderDiv.setAttribute('data-bynder-widget', 'video-item');\n\t\t\t\t\tbynderDiv.setAttribute('data-media-id', bynderID);\n\t\t\t\t\tmediaVideoElement.appendChild(bynderDiv);\n\t\t\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tif (typeof BynderEmbed !== 'undefined' && typeof BynderEmbed.load === 'function') {\n\t\t\t\t\t\t\tBynderEmbed.load();\n\t\t\t\t\t\t}\n\t\t\t\t\t}, 500);\n\t\t\t\t} else {\n\t\t\t\t\t\/\/ No valid YouTube or Bynder = error\n\t\t\t\t\tshowVideoError();\n\t\t\t\t}\n\t\t\t}\n\t\t\n\t\t\tfunction showVideoError() {\n\t\t\t\tconst errorDiv = document.createElement('div');\n\t\t\t\terrorDiv.id = 'video-error-id_69d8f3a1e9c16';\n\t\t\t\terrorDiv.className = 'video-error';\n\t\t\t\terrorDiv.innerHTML = `\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<h3>Video Unavailable<\/h3>\n\t\t\t\t\t\t<p>The content you\u2019re seeking is momentarily unavailable. We appreciate your patience and look forward to sharing it with you soon.<\/p>\n\t\t\t\t\t<\/div>\n\t\t\t\t`;\n\t\t\t\tmediaVideoElement.appendChild(errorDiv);\n\t\t\t}\n\t\t}\n\t\t\n\t\tfunction runVideoInjection() {\n\t\t\tif (hasRun_id_69d8f3a1e9c16) return;\n\t\t\thasRun_id_69d8f3a1e9c16 = true;\n\t\t\tupdateVideoDisplay_id_69d8f3a1e9c16();\n\t\t}\n\t\t\n\t\t\/\/ Always run on front-end\n\t\tif (document.readyState === 'loading') {\n\t\t\tdocument.addEventListener('DOMContentLoaded', runVideoInjection);\n\t\t} else {\n\t\t\trunVideoInjection();\n\t\t}\n\t\t\n\t\t\/\/ Also run in editor if available\n\t\tif (typeof wp !== 'undefined' && wp.domReady) {\n\t\t\twp.domReady(runVideoInjection);\n\t\t}\n\t})();\n\t<\/script>\n\t\n\t<script>\n\t\tdocument.addEventListener('DOMContentLoaded', function () {\n\t\t\t\n\t\t\t\/\/ Get the block element by ID\n\t\t\tvar blockElement = document.getElementById(\"id_69d8f3a1e9c16\");\n\t\t\tif (!blockElement) return;\n\t\n\t\t\t\/\/ Reveal the block\n\t\t\t(function ($) {\n\t\t\t\tScrollReveal().reveal(blockElement.querySelector(\".container .media\"), {origin: \"bottom\", distance: \"20px\", opacity: 1, duration: 1000});\n\t\t\t\tScrollReveal().reveal(blockElement.querySelector(\".container .content\"), {origin: \"bottom\", distance: \"20px\", opacity: 1, duration: 1000});\n\t\t\t}(jQuery));\n\t\t});\n\t<\/script>\n<\/div>\n\n<div class=\"spacer block\" style=\"height: 24px;\">\n\t<\/div>\n\n\n<p>While system-level updates like this are common, there is a growing interest in enabling firmware changes to lower-level components, such as the DC\/DC converters that power processors in server applications. These converters provide essential volts and amps, but increasingly feature digital control and monitoring capabilities. This allows manufacturers to configure a common platform product for multiple applications or for users to customize parameters such as voltage set-point, fault detection limits, and sometimes even loop frequency response. This is all done typically via a PMBus\u00ae interface with its elementary security features. However, the core DC\/DC functionality is stored in non-volatile memory \u2014 firmware which remains inaccessible.<\/p>\n\n\n\t\t<\/div>\n\t\t<div class=\"sidebar normal-column\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t<\/div>\n<\/div>\n\n<div id=\"id-69d8f3a21256d\" class=\"box block full-width dark-content zh \" style=\"background-color: transparent; background-image: none;\">\n\t<style>\n\t\t#id-69d8f3a21256d > .container > .content {\n\t\t\tbackground-color: transparent;\n\t\t\tposition: relative;\n\t\t\tpadding-top: 48px;\n\t\t\tpadding-right: 0px;\n\t\t\tpadding-bottom: 84px;\n\t\t\tpadding-left: 0px;\n\t\t\tmargin-left: 0px;\n\t\t\tmargin-right: 0px;\n\t\t}\n\t\t@media (max-width: 1272px) {\n\t\t\t#id-69d8f3a21256d.box.block.full-width > .container > .content {\n\t\t\t\tpadding-left: 0 !important;\n\t\t\t\tpadding-right: 0 !important;\n\t\t\t\tmargin: 0 !important;\n\t\t\t}\n\t\t}\n\t\t@media (max-width: 960px) {\n\t\t\t#id-69d8f3a21256d > .container > .content {\n\t\t\t\t\/\/padding-top: 24px;\n\t\t\t\tpadding-right: 0px;\n\t\t\t\t\/\/padding-bottom: 42px;\n\t\t\t\tpadding-left: 0px;\n\t\t\t}\n\t\t}\n\t<\/style>\n\t<div class=\"container\">\n\t\t<div class=\"content\">\n\t\t\t\n\n<h2 class=\"wp-block-heading has-medium-font-size\" id=\"h-why-would-you-want-to-change-dc-dc-firmware\" style=\"font-style:normal;font-weight:600\">Why would you want to change DC\/DC firmware?<\/h2>\n\n\n\n<p>As DC\/DCs have evolved and become more complex and capable, several scenarios have emerged where updating firmware after the parts have been shipped could be beneficial:<\/p>\n\n\n<div id=\"id-69d8f3a2117f7\" class=\"columns block\">\n\t<style>\n\t\t#id-69d8f3a2117f7 .column, #id-69d8f3a2117f7 .wp-block-acf-column {\n\t\t\tpadding: 0 18px;\n\t\t}\n\t\t\n\t\t#id-69d8f3a2117f7 > .container.show-rules .column+.column, #id-69d8f3a2117f7 > .container.show-rules .wp-block-acf-column+.wp-block-acf-column {\n\t\t\tborder-color: rgba(38, 38, 38, 0.2);\n\t\t}\n\t\t\n\t\t#id-69d8f3a2117f7 .column, #id-69d8f3a2117f7 .wp-block-acf-column {\n\t\t\t.code.block {\n\t\t\t\t.container {\n\t\t\t\t\t.tagembed-widget {\n\t\t\t\t\t\tmax-width: 600px;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\t@media (max-width: 1320px) {\n\t\t\t#id-69d8f3a2117f7 > .container {\n\t\t\t\tdisplay: block;\n\t\t\t\tmax-width: 600px;\n\t\t\t}\n\t\t}\n\t\t@media (max-width: 1320px) {\n\t\t\t#id-69d8f3a2117f7 > .container > .column, #id-69d8f3a2117f7 > .container > .wp-block-acf-column {\n\t\t\t\tpadding: 36px 0 0 0 !important;\n\t\t\t}\n\t\t}\n\t\t@media (max-width: 1320px) {\n\t\t\t#id-69d8f3a2117f7 > .container > .column:first-child, #id-69d8f3a2117f7 > .container > .wp-block-acf-column:first-child {\n\t\t\t\tpadding: 0 !important;\n\t\t\t}\n\t\t}\n\t\t@media (max-width: 1320px) {\n\t\t\t#id-69d8f3a2117f7 > .container.show-rules .column+.column, #id-69d8f3a2117f7 > .container.show-rules .wp-block-acf-column+.wp-block-acf-column {\n\t\t\t\tborder-left: none;\n\t\t\t\tborder-top: 1px solid rgba(38, 38, 38, 0.2);\n\t\t\t\tpadding: 30px 0 0 0 !important;\n\t\t\t\tmargin-top: 30px;\n\t\t\t}\n\t\t}\n\t<\/style>\n\t<div class=\"container align-center\">\n\t\t\n<div class=\"column block\">\n\t\n\n<ul class=\"wp-block-list\">\n<li><strong>Some customer needs may go beyond the features covered by PMBus commands:<\/strong> For example, customization of \u2018event record data\u2019 or adding unique part identifiers<\/li>\n\n\n\n<li><strong>Basic functionality changes:<\/strong> This might occur in custom DC\/DC designs where parts are shipped to support prototype systems whose specifications are still evolving<\/li>\n\n\n\n<li><strong>Installation of manufacturer upgrades to enhance functionality:<\/strong> For example, improved algorithms for achieving current sharing might require updates<\/li>\n\n\n\n<li><strong>Firmware verification:<\/strong> Reinstalling default firmware could help verify system integrity<\/li>\n\n\n\n<li><strong>Declared new bug fixes:<\/strong> Addressing identified issues post-deployment<\/li>\n<\/ul>\n\n\n<\/div>\n\n<div class=\"column block\">\n\t\n<div id=\"id-69d8f3a20c5aa\" class=\"box block content-width dark-content zh \" style=\"background-color: transparent; background-image: none;\">\n\t<style>\n\t\t#id-69d8f3a20c5aa > .container > .content {\n\t\t\tbackground-color: transparent;\n\t\t\tposition: relative;\n\t\t\tpadding-top: 0px;\n\t\t\tpadding-right: 24px;\n\t\t\tpadding-bottom: 0px;\n\t\t\tpadding-left: 24px;\n\t\t\tmargin-left: 0px;\n\t\t\tmargin-right: 0px;\n\t\t}\n\t\t@media (max-width: 1272px) {\n\t\t\t#id-69d8f3a20c5aa.box.block.full-width > .container > .content {\n\t\t\t\tpadding-left: 0 !important;\n\t\t\t\tpadding-right: 0 !important;\n\t\t\t\tmargin: 0 !important;\n\t\t\t}\n\t\t}\n\t\t@media (max-width: 960px) {\n\t\t\t#id-69d8f3a20c5aa > .container > .content {\n\t\t\t\t\/\/padding-top: 0px;\n\t\t\t\tpadding-right: 12px;\n\t\t\t\t\/\/padding-bottom: 0px;\n\t\t\t\tpadding-left: 12px;\n\t\t\t}\n\t\t}\n\t<\/style>\n\t<div class=\"container\">\n\t\t<div class=\"content\">\n\t\t\t\n<div id=\"id_69d8f3a203a12\" class=\"media block\">\n\t<div class=\"container media-center \">\n\t\t<div class=\"media\" style=\"left: 0px; min-width: 456px; max-width: 456px;\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t<\/div>\n\t\n\t<script>\n\t(function () {\n\t\tlet hasRun_id_69d8f3a203a12 = false;\n\t\tfunction updateVideoDisplay_id_69d8f3a203a12() {\n\t\t\tconst youtubeVideoId = \"\";\n\t\t\tconst bynderID = \"\";\n\t\t\tconst mediaType = \"image\";\n\t\t\tconst mediaVideoElement = document.getElementById('media-video-id_69d8f3a203a12');\n\t\t\tconst bodyClass = document.body.className || '';\n\t\t\tconst match = bodyClass.match(\/translatepress-([a-z]{2})(?:_[A-Z]{2})?\/i);\n\t\t\tconst currentLanguage = match ? match[1].toLowerCase() : 'en';\n\t\t\tconst isChineseLang = currentLanguage === 'zh';\n\t\t\tconsole.log('isChineseLang:', isChineseLang);\n\t\t\tconsole.log('Language detected:', currentLanguage);\n\t\t\tconst isValidYouTube = youtubeVideoId && \/^[A-Za-z0-9_-]{11}$\/.test(youtubeVideoId);\n\t\t\t\n\t\t\tif (!mediaVideoElement || mediaType !== \"video\") return;\n\t\t\tmediaVideoElement.innerHTML = ''; \/\/ Clear existing content\n\t\t\t\n\t\t\tlet videoSourceClass = 'fallback-error';\n\t\t\t\n\t\t\tif (isChineseLang) {\n\t\t\t\tif (bynderID) {\n\t\t\t\t\tvideoSourceClass = 'bynder';\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (isValidYouTube) {\n\t\t\t\t\tvideoSourceClass = 'youtube';\n\t\t\t\t} else if (bynderID) {\n\t\t\t\t\tvideoSourceClass = 'bynder';\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t\/\/ Apply layout class (used in SCSS)\n\t\t\tmediaVideoElement.className = 'video ' + videoSourceClass;\n\t\t\n\t\t\t\/\/ CASE: Chinese language\n\t\t\tif (isChineseLang) {\n\t\t\t\tif (bynderID) {\n\t\t\t\t\t\/\/ Load Bynder\n\t\t\t\t\tif (!document.getElementById('bynder-widgets-js')) {\n\t\t\t\t\t\tconst script = document.createElement('script');\n\t\t\t\t\t\tscript.src = 'https:\/\/d8ejoa1fys2rk.cloudfront.net\/bynder-embed\/latest\/bynder-embed.js';\n\t\t\t\t\t\tscript.id = 'bynder-widgets-js';\n\t\t\t\t\t\tscript.setAttribute('data-account-url', 'https:\/\/brandcenter.flex.com');\n\t\t\t\t\t\tscript.setAttribute('data-language', 'zh');\n\t\t\t\t\t\tdocument.body.appendChild(script);\n\t\t\t\t\t}\n\t\t\n\t\t\t\t\tconst bynderDiv = document.createElement('div');\n\t\t\t\t\tbynderDiv.id = 'bynder-id_69d8f3a203a12';\n\t\t\t\t\tbynderDiv.className = 'video-bynder';\n\t\t\t\t\tbynderDiv.setAttribute('data-bynder-widget', 'video-item');\n\t\t\t\t\tbynderDiv.setAttribute('data-media-id', bynderID);\n\t\t\t\t\tmediaVideoElement.appendChild(bynderDiv);\n\t\t\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tif (typeof BynderEmbed !== 'undefined' && typeof BynderEmbed.load === 'function') {\n\t\t\t\t\t\t\tBynderEmbed.load();\n\t\t\t\t\t\t}\n\t\t\t\t\t}, 500);\n\t\t\t\t} else {\n\t\t\t\t\t\/\/ No Bynder = error (even if YouTube is valid)\n\t\t\t\t\tshowVideoError();\n\t\t\t\t}\n\t\t\n\t\t\t\/\/ CASE: Not Chinese\n\t\t\t} else {\n\t\t\t\tif (isValidYouTube) {\n\t\t\t\t\tconst iframe = document.createElement('iframe');\n\t\t\t\t\tiframe.id = 'youtube-id_69d8f3a203a12';\n\t\t\t\t\tiframe.className = 'video-youtube';\n\t\t\t\t\tiframe.src = 'https:\/\/www.youtube.com\/embed\/' + youtubeVideoId + '?rel=0';\n\t\t\t\t\tiframe.frameBorder = '0';\n\t\t\t\t\tiframe.playsInline = true;\n\t\t\t\t\tiframe.allow = 'encrypted-media';\n\t\t\t\t\tiframe.allowFullscreen = true;\n\t\t\t\t\tmediaVideoElement.appendChild(iframe);\n\t\t\t\t} else if (bynderID) {\n\t\t\t\t\t\/\/ Load Bynder (fallback if no YouTube)\n\t\t\t\t\tif (!document.getElementById('bynder-widgets-js')) {\n\t\t\t\t\t\tconst script = document.createElement('script');\n\t\t\t\t\t\tscript.src = 'https:\/\/d8ejoa1fys2rk.cloudfront.net\/bynder-embed\/latest\/bynder-embed.js';\n\t\t\t\t\t\tscript.id = 'bynder-widgets-js';\n\t\t\t\t\t\tscript.setAttribute('data-account-url', 'https:\/\/brandcenter.flex.com');\n\t\t\t\t\t\tscript.setAttribute('data-language', currentLanguage);\n\t\t\t\t\t\tdocument.body.appendChild(script);\n\t\t\t\t\t}\n\t\t\n\t\t\t\t\tconst bynderDiv = document.createElement('div');\n\t\t\t\t\tbynderDiv.id = 'bynder-id_69d8f3a203a12';\n\t\t\t\t\tbynderDiv.className = 'video-bynder';\n\t\t\t\t\tbynderDiv.setAttribute('data-bynder-widget', 'video-item');\n\t\t\t\t\tbynderDiv.setAttribute('data-media-id', bynderID);\n\t\t\t\t\tmediaVideoElement.appendChild(bynderDiv);\n\t\t\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tif (typeof BynderEmbed !== 'undefined' && typeof BynderEmbed.load === 'function') {\n\t\t\t\t\t\t\tBynderEmbed.load();\n\t\t\t\t\t\t}\n\t\t\t\t\t}, 500);\n\t\t\t\t} else {\n\t\t\t\t\t\/\/ No valid YouTube or Bynder = error\n\t\t\t\t\tshowVideoError();\n\t\t\t\t}\n\t\t\t}\n\t\t\n\t\t\tfunction showVideoError() {\n\t\t\t\tconst errorDiv = document.createElement('div');\n\t\t\t\terrorDiv.id = 'video-error-id_69d8f3a203a12';\n\t\t\t\terrorDiv.className = 'video-error';\n\t\t\t\terrorDiv.innerHTML = `\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<h3>Video Unavailable<\/h3>\n\t\t\t\t\t\t<p>The content you\u2019re seeking is momentarily unavailable. We appreciate your patience and look forward to sharing it with you soon.<\/p>\n\t\t\t\t\t<\/div>\n\t\t\t\t`;\n\t\t\t\tmediaVideoElement.appendChild(errorDiv);\n\t\t\t}\n\t\t}\n\t\t\n\t\tfunction runVideoInjection() {\n\t\t\tif (hasRun_id_69d8f3a203a12) return;\n\t\t\thasRun_id_69d8f3a203a12 = true;\n\t\t\tupdateVideoDisplay_id_69d8f3a203a12();\n\t\t}\n\t\t\n\t\t\/\/ Always run on front-end\n\t\tif (document.readyState === 'loading') {\n\t\t\tdocument.addEventListener('DOMContentLoaded', runVideoInjection);\n\t\t} else {\n\t\t\trunVideoInjection();\n\t\t}\n\t\t\n\t\t\/\/ Also run in editor if available\n\t\tif (typeof wp !== 'undefined' && wp.domReady) {\n\t\t\twp.domReady(runVideoInjection);\n\t\t}\n\t})();\n\t<\/script>\n\t\n\t<script>\n\t\tdocument.addEventListener('DOMContentLoaded', function () {\n\t\t\t\n\t\t\t\/\/ Get the block element by ID\n\t\t\tvar blockElement = document.getElementById(\"id_69d8f3a203a12\");\n\t\t\tif (!blockElement) return;\n\t\n\t\t\t\/\/ Reveal the block\n\t\t\t(function ($) {\n\t\t\t\tScrollReveal().reveal(blockElement.querySelector(\".container .media\"), {origin: \"bottom\", distance: \"20px\", opacity: 1, duration: 1000});\n\t\t\t\tScrollReveal().reveal(blockElement.querySelector(\".container .content\"), {origin: \"bottom\", distance: \"20px\", opacity: 1, duration: 1000});\n\t\t\t}(jQuery));\n\t\t});\n\t<\/script>\n<\/div>\n\n\n<p class=\"has-text-align-center has-small-font-size\"><em>A modern DC\/DC with PMBus interface and embedded firmware<\/em>.<\/p>\n\n\n\t\t<\/div>\n\t<\/div>\n<\/div>\n\n\n<\/div>\n\n\t<\/div>\n<\/div>\n\n\n<h3 class=\"wp-block-heading\" style=\"font-style:normal;font-weight:600\">Allowing firmware access \u2014 the challenges<\/h3>\n\n\n\n<p>Currently, DC\/DC converters are typically not designed to allow access to firmware to ensure security, protect the device from invalid and possible harmful changes, and to safeguard the manufacturer\u2019s intellectual property. In theory, an existing PMBus interface could be used to make firmware changes with the appropriate levels of security. This is addressed in the proposed PMBus 1.5 specification, a version that defines enhanced security measures and encryption-based authentication to target specific devices and limit command write capabilities. <\/p>\n\n\n\n<p>In practice, DC\/DCs stocked as components could be designed to allow firmware updates through the PMBus via a custom fixture and PC with a manufacturer-supplied software application. This would be similar to a GUI used for configuration, such as Flex Power Designer. Voltage would need to be applied to the DC\/DC input via the fixture to power the internal processor and memory during the update.<\/p>\n\n\n\n<p>Updating firmware for installed DC\/DC converters presents significant potential challenges. Any external processor handling the update would typically be powered from the DC\/DC output itself, which therefore must not be interrupted during the uploading process. However, with only one memory space, the converter can\u2019t operate during the update, as the first thing that happens during uploading is that memory is erased. With that, there is no code to control the DC\/DC conversion process and consequently no output power. A possible solution to this is to load the new DC\/DC firmware code into a secondary memory area, then this area is made the main one after verification. Not only would this enable output voltage during the uploading process, but it would also allow reversion to known good code if the upload fails.<\/p>\n\n\n\n<p>In theory, the memory could be split into partitions of different sizes, one only providing a basic \u2018recovery\u2019 function in a smaller memory space. However, in practice, converters might be tied together in parallel mode or similar, requiring all code to be there for the parts to start correctly and safely. So, it is most likely that two full-size memory spaces would be required in each DC\/DC, with the consequent extra cost and size. Another possibility is to physically partition the memory spaces so that the basic power conversion functionality is not erased during an upload, accepting the limitation that this cannot be updated. Again, implementing this would be a significant hardware overhead.<\/p>\n\n\n\n<p>Since an upload might happen several times during the lifetime of the DC\/DC, a practical problem is that the extra memory needs to be \u2018Flash\u2019 type which is more expensive than the popular \u2018One Time Programmable\u2019 memory. The improved functionality, therefore, comes at the expense of device size, complexity, and manufacturing costs. <\/p>\n\n\n\n<h2 class=\"wp-block-heading has-medium-font-size\" style=\"font-style:normal;font-weight:600\">Final thoughts<\/h2>\n\n\n\n<p>Enabling remote access to firmware in components like DC\/DC converters offers many potential advantages, such as allowing updates to keep a system operating efficiently. However, the cost of implementation and the associated security risks must be carefully considered. Additionally, there is new legislation, such as the European Cyber Resilience Act (CRA), to consider that require manufacturers of end-equipment with a \u2018digital component\u2019 to allow software updates to address any security vulnerabilities identified&#8230;<\/p>\n\n\n\n<p>As the concept of allowing remote access to component firmware evolves, end-equipment and DC\/DC manufacturers will need to liaise closely to ensure that improved functionality and security are achieved, without unsustainable extra costs and component size.<\/p>\n\n\n\t\t<\/div>\n\t<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Most high-performance DC\/DC converters used in servers come with an element of digital monitoring and control, with functionality set in firmware.  In this blog, we consider whether this firmware could be accessible to users for modification, and what the potential implications are.<\/p>","protected":false},"author":18,"featured_media":4974,"template":"","categories":[38,90,43,97],"tags":[135,257,254,253,115,140],"content-type":[13],"class_list":["post-40523","resource","type-resource","status-publish","has-post-thumbnail","hentry","category-communications","category-data-center-power","category-power","category-power-modules","tag-bmr316","tag-bmr320","tag-bmr321","tag-bmr352","tag-bmr491","tag-bmr510","content-type-blog"],"acf":[],"_links":{"self":[{"href":"https:\/\/flex.com\/zh\/wp-json\/wp\/v2\/resource\/40523","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/flex.com\/zh\/wp-json\/wp\/v2\/resource"}],"about":[{"href":"https:\/\/flex.com\/zh\/wp-json\/wp\/v2\/types\/resource"}],"author":[{"embeddable":true,"href":"https:\/\/flex.com\/zh\/wp-json\/wp\/v2\/users\/18"}],"version-history":[{"count":1,"href":"https:\/\/flex.com\/zh\/wp-json\/wp\/v2\/resource\/40523\/revisions"}],"predecessor-version":[{"id":40557,"href":"https:\/\/flex.com\/zh\/wp-json\/wp\/v2\/resource\/40523\/revisions\/40557"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/flex.com\/zh\/wp-json\/wp\/v2\/media\/4974"}],"wp:attachment":[{"href":"https:\/\/flex.com\/zh\/wp-json\/wp\/v2\/media?parent=40523"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/flex.com\/zh\/wp-json\/wp\/v2\/categories?post=40523"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/flex.com\/zh\/wp-json\/wp\/v2\/tags?post=40523"},{"taxonomy":"content-type","embeddable":true,"href":"https:\/\/flex.com\/zh\/wp-json\/wp\/v2\/content-type?post=40523"}],"curies":[{"name":"\u53ef\u6e7f\u6027\u7c89\u5242","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}