{"id":205,"date":"2019-12-25T14:40:01","date_gmt":"2019-12-25T14:40:01","guid":{"rendered":"http:\/\/www.beer.org\/blog\/?p=205"},"modified":"2019-12-25T18:41:45","modified_gmt":"2019-12-25T18:41:45","slug":"google-nest-mini-teardown","status":"publish","type":"post","link":"https:\/\/www.beer.org\/blog\/index.php\/2019\/12\/25\/google-nest-mini-teardown\/","title":{"rendered":"Google Nest Mini teardown"},"content":{"rendered":"<p>Google seems to be giving away these Nest Mini things so my son gave me one of his.\u00a0 While waiting for the family to wake up on Christmas morning, I decided to tear into it and see what&#8217;s inside.\u00a0 I&#8217;ve only been at it for a couple of hours so I don&#8217;t have much to report yet.<\/p>\n<p>Once you get its pajamas off, you see a board with a cpu (Synaptics AS-370), some DDR,\u00a0 and what looks like a TC58NVG2S0HBAI6 4Gb NAND.\u00a0 \u00a0On the back of the board is a Wifi\/Bluetooth thing probably.\u00a0 I haven&#8217;t taken the RF can off yet.<\/p>\n<p>&nbsp;<\/p>\n<p><a href=\"https:\/\/www.beer.org\/blog\/index.php\/2019\/12\/25\/google-nest-mini-teardown\/img_20191225_070020266\/\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-206\" src=\"https:\/\/www.beer.org\/blog\/wp-content\/uploads\/2019\/12\/IMG_20191225_070020266-scaled.jpg\" alt=\"\" width=\"1080\" height=\"810\" srcset=\"https:\/\/www.beer.org\/blog\/wp-content\/uploads\/2019\/12\/IMG_20191225_070020266-scaled.jpg 2560w, https:\/\/www.beer.org\/blog\/wp-content\/uploads\/2019\/12\/IMG_20191225_070020266-300x225.jpg 300w, https:\/\/www.beer.org\/blog\/wp-content\/uploads\/2019\/12\/IMG_20191225_070020266-1024x768.jpg 1024w, https:\/\/www.beer.org\/blog\/wp-content\/uploads\/2019\/12\/IMG_20191225_070020266-768x576.jpg 768w, https:\/\/www.beer.org\/blog\/wp-content\/uploads\/2019\/12\/IMG_20191225_070020266-1536x1152.jpg 1536w, https:\/\/www.beer.org\/blog\/wp-content\/uploads\/2019\/12\/IMG_20191225_070020266-2048x1536.jpg 2048w, https:\/\/www.beer.org\/blog\/wp-content\/uploads\/2019\/12\/IMG_20191225_070020266-660x495.jpg 660w\" sizes=\"auto, (max-width: 1080px) 100vw, 1080px\" \/><\/a><\/p>\n<p>I usually start by soldering fly wires onto whatever test pads I can find and run the logic analyzer while I boot the thing in hopes I can find a serial port and maybe some I2C or SPI.<\/p>\n<p><a href=\"https:\/\/www.beer.org\/blog\/index.php\/2019\/12\/25\/google-nest-mini-teardown\/screen-shot-2019-12-25-at-7-36-54-am\/\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-207\" src=\"https:\/\/www.beer.org\/blog\/wp-content\/uploads\/2019\/12\/Screen-Shot-2019-12-25-at-7.36.54-AM-1024x554.png\" alt=\"\" width=\"1080\" height=\"584\" srcset=\"https:\/\/www.beer.org\/blog\/wp-content\/uploads\/2019\/12\/Screen-Shot-2019-12-25-at-7.36.54-AM-1024x554.png 1024w, https:\/\/www.beer.org\/blog\/wp-content\/uploads\/2019\/12\/Screen-Shot-2019-12-25-at-7.36.54-AM-300x162.png 300w, https:\/\/www.beer.org\/blog\/wp-content\/uploads\/2019\/12\/Screen-Shot-2019-12-25-at-7.36.54-AM-768x415.png 768w, https:\/\/www.beer.org\/blog\/wp-content\/uploads\/2019\/12\/Screen-Shot-2019-12-25-at-7.36.54-AM-1536x831.png 1536w, https:\/\/www.beer.org\/blog\/wp-content\/uploads\/2019\/12\/Screen-Shot-2019-12-25-at-7.36.54-AM-660x357.png 660w, https:\/\/www.beer.org\/blog\/wp-content\/uploads\/2019\/12\/Screen-Shot-2019-12-25-at-7.36.54-AM.png 1919w\" sizes=\"auto, (max-width: 1080px) 100vw, 1080px\" \/><\/a><\/p>\n<p>I found the serial port:<\/p>\n<blockquote><p>decompressing kernel image size 3866136&#8230;<br \/>\nkernel img addr 0x2080000, kern img len 12017672.<br \/>\nHACK! skip setup_android_kernel_param<br \/>\nmkbootimg bootargs: init=\/init console= mtdblock.ro_fspart=&#8221;rootfs&#8221; ro nooverlayfs<br \/>\nGenerated bootargs: init=\/init console= mtdblock.ro_fspart=&#8221;rootfs&#8221; ro nooverlayfs<br \/>\nupdate opp V2 table to dtb<br \/>\nchip rev is A1<br \/>\nvl = 825000<br \/>\nvh = 900000<br \/>\nGot 2 value for vcpu vl and vh<br \/>\nchip rev is A1<br \/>\nSelect PMIC chip sy8824b for Kernel !<br \/>\nUpdate silergy,sy8824!<br \/>\nUpdate cpu0-supply!<br \/>\nDelete silergy,sy20276 for Kernel !<br \/>\nDelete silergy,sy20278 for Kernel !<br \/>\nDelete silergy,sy20278 for Kernel !<br \/>\nSet dtb param for linux: ramdisk start 0xC3B0800, size 0x21EB30<br \/>\nchip rev is A1<br \/>\nchip rev is A1<\/p>\n<p>Boot normal GTV image<br \/>\nStart kernel at 0x02080000, dtb at 0x0be00000<\/p><\/blockquote>\n<p>Looks like it&#8217;s running a modified Google TV image just like the old Chromecast.<\/p>\n<p>The Serial console is at 1.8v and I don&#8217;t have a USB&lt;-&gt;TTL serial converter at 1.8v right now so it looks like that&#8217;ll be the end of that for now.\u00a0 I&#8217;m guessing it won&#8217;t let me interrupt the boot anyway and nothing appears after the kernel boots (see &#8220;console=&#8221; is blank).<\/p>\n<p>Time to open presents.<\/p>\n<p>&nbsp;<\/p>\n<p>After firmware update, the serial port is slightly more interesting:<\/p>\n<p>&nbsp;<\/p>\n<blockquote><p>bg6cd z1 erom: release id 0x5741fac, commit time Fri May 17 14:26:53 2019 -0700<br \/>\nbg6cd z1 hal : release id 0x8651a82, commit time Thu Jun 13 09:30:56 2019 -0700<br \/>\ndisable pcie<br \/>\nild-in module: release id 0xd32a267, commit time Fri May 17 14:29:05 2019 -0700<br \/>\nLoad sysinit<br \/>\nStart ACPU<br \/>\nset vcore<br \/>\nDHL v0p90<br \/>\nhw_init done<br \/>\ncustom table done<br \/>\nasking BCM to load miniloader.<br \/>\ntry to verify flash miniloader<br \/>\ninit syspll 400MHz<br \/>\nimage2_init fitnsismh: erd,e lejaumspe iingd 0txo 85nbe5xt58 6i,ma cgoem.<br \/>\nm<br \/>\nit time Tue Jun 25 10:2&#8217;14&#8217;tz5_:l5o0a der2 0s1t9art .- 0b7oot0_0s<br \/>\nt<br \/>\nrap=0x00010003 (source=SPI Secure), boot_state=0x0<br \/>\nsyspll 400MHz, 600MHz<br \/>\nset nna_sys at speed 600<br \/>\nset nna_core at speed 600<br \/>\nset avio_sys at speed 400<br \/>\nset nna_core at speed 600<br \/>\nset avio_sys at speed 400<br \/>\nset atb at speed 200<br \/>\nset perif_sys at speed 200<br \/>\nset apb_core at speed 100<br \/>\nset nfc_ecc at speed 200<br \/>\nset nfc_core at speed 200<br \/>\npinmux 0 0 0 0<br \/>\nclk a1 a1<br \/>\nclk a1 121<br \/>\nULT (byte[0:7]) = aba80aa2ac782956<br \/>\nNAND block size 0x40000, page size 0x1000, ecc_strength 0x30<br \/>\n&#8212; TZ_loader &#8212; bootloader<br \/>\nNAND block size 0x40000, page size 0x1000, ecc_strength 0x30<br \/>\nRead from block 1<br \/>\nnand read 1250000, 7f800, 800<br \/>\nlastK: 0x202c237, 0x202c237, 0xa1346d2<br \/>\nNAND block size 0x40000, page size 0x1000, ecc_strength 0x30<br \/>\nret = 0<br \/>\ntz_loader: image4 verified.<br \/>\ntz_en image load verify success<br \/>\nret = ffe00301<br \/>\nLoad LastK: return value: 0xffffffff<br \/>\nret = 0<br \/>\ntz_loader: image4 verified.<br \/>\nbl_en image read and verify success<br \/>\nfeature:video\/dolby_vision=true; feature:video\/tcl_hdr=true;<br \/>\ntz_loader: start image4.<br \/>\nNOTICE: BL31: v1.3(debug):7bf8e6b<br \/>\nNOTICE: BL31: Built : 09:46:49, Jan 18 2019<br \/>\nINFO: ARM GICv2 driver initialized<br \/>\nINFO: BL31: Initializing runtime services<br \/>\nINFO: BL3-1: Initializing berlinspd<br \/>\nINFO: BL31: Initializing BL32<br \/>\ntz kernel starting&#8230; total 4 cpus, v3.2.0.9, May 29 2019 10:48:04@HEAD:cff79c5<br \/>\nINFO: BL31: Preparing for EL3 exit to normal world<br \/>\nINFO: Entry point address = 0x4580000<br \/>\nINFO: SPSR = 0x3c9<br \/>\nBoard: valens-b4<\/p>\n<p>&#8212;&#8212; Entered Power_measurement_script() &#8212;&#8212;-<br \/>\npowerdown emmc<br \/>\npowerdown spi<br \/>\npowerdown pcie<\/p>\n<p>&#8212;&#8212; End Power_measurement_script() &#8212;&#8212;<br \/>\nPinmux reg 0: 0xf7ea0840 = 0x08003049<br \/>\nPinmux reg 1: 0xf7ea0844 = 0x00009200<br \/>\nPinmux reg 0: 0xf7ea0840 = 0x08003049<br \/>\nPinmux reg 1: 0xf7ea0844 = 0x00009200<br \/>\nPinmux reg 2: 0xf7ea0848 = 0x00000000<br \/>\nPinmux reg 3: 0xf7ea084c = 0x00000000<br \/>\nPinmux reg 4: 0xf7ea0850 = 0x00001200<br \/>\nPinmux reg 5: 0xf7ea0854 = 0x00000000<br \/>\nPinmux reg 6: 0xf7ea0858 = 0x09209249<br \/>\nPMIC detected with SY8824B<br \/>\ncpupll: 1400<br \/>\nPMIC: SY8824B selected!<br \/>\nchip rev is A1<br \/>\nleakage info 626.<br \/>\nset Vcpu from 850000uv to 825000uv<br \/>\nClock configuration:<br \/>\nfts: v11 loaded from 0x00028000<br \/>\nchip is warm boot.<br \/>\n****************************************************************<br \/>\nRead and setup kernel Image<br \/>\n****************************************************************<br \/>\nDBGDBG k_buff_img[0]=0x0<br \/>\nDBGDBG k_buff_img[1]=0x0<br \/>\nDBGDBG k_buff_img[2]=0x0<br \/>\nDBGDBG k_buff_img[3]=0x20<br \/>\ndecompressing kernel image size 3888875&#8230;<br \/>\nkernel img addr 0x2080000, kern img len 12085256.<br \/>\nHACK! skip setup_android_kernel_param<br \/>\nmkbootimg bootargs: init=\/init console= mtdblock.ro_fspart=&#8221;rootfs&#8221; ro nooverlayfs<br \/>\nGenerated bootargs: init=\/init console= mtdblock.ro_fspart=&#8221;rootfs&#8221; ro nooverlayfs<br \/>\nupdate opp V2 table to dtb<br \/>\nchip rev is A1<br \/>\nvl = 825000<br \/>\nvh = 900000<br \/>\nGot 2 value for vcpu vl and vh<br \/>\nchip rev is A1<br \/>\nSelect PMIC chip sy8824b for Kernel !<br \/>\nUpdate silergy,sy8824!<br \/>\nUpdate cpu0-supply!<br \/>\nDelete silergy,sy20276 for Kernel !<br \/>\nDelete silergy,sy20278 for Kernel !<br \/>\nSet dtb param for linux: ramdisk start 0xC3B6000, size 0x21EF1C<br \/>\nchip rev is A1<br \/>\nchip rev is A1<\/p>\n<p>Boot normal GTV image<br \/>\nStart kernel at 0x02080000, dtb at 0x0be00000<\/p><\/blockquote>\n","protected":false},"excerpt":{"rendered":"<p>Google seems to be giving away these Nest Mini things so my son gave me one of his.\u00a0 While waiting for the family to wake up on Christmas morning, I decided to tear into it and see what&#8217;s inside.\u00a0 I&#8217;ve only been at it for a couple of hours so I don&#8217;t have much to&#8230; <a class=\"moretag\" href=\"https:\/\/www.beer.org\/blog\/index.php\/2019\/12\/25\/google-nest-mini-teardown\/\">Continue reading &raquo;<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7],"tags":[],"class_list":["post-205","post","type-post","status-publish","format-standard","hentry","category-tech-stuff"],"_links":{"self":[{"href":"https:\/\/www.beer.org\/blog\/index.php\/wp-json\/wp\/v2\/posts\/205","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.beer.org\/blog\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.beer.org\/blog\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.beer.org\/blog\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.beer.org\/blog\/index.php\/wp-json\/wp\/v2\/comments?post=205"}],"version-history":[{"count":4,"href":"https:\/\/www.beer.org\/blog\/index.php\/wp-json\/wp\/v2\/posts\/205\/revisions"}],"predecessor-version":[{"id":212,"href":"https:\/\/www.beer.org\/blog\/index.php\/wp-json\/wp\/v2\/posts\/205\/revisions\/212"}],"wp:attachment":[{"href":"https:\/\/www.beer.org\/blog\/index.php\/wp-json\/wp\/v2\/media?parent=205"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.beer.org\/blog\/index.php\/wp-json\/wp\/v2\/categories?post=205"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.beer.org\/blog\/index.php\/wp-json\/wp\/v2\/tags?post=205"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}