Roku Premiere (4620X “Cooper”) Power Socket

When I tear down some retired electronic device, I try to salvage what I know I could reuse and that usually includes the power supply. A few of these salvaged power supplies have already found use, but sometimes I’m hindered by the fact I saved only the power supply and not its corresponding power socket. Sometimes I can replace the connector, but sometimes not. As a result, I’ve resolved to put more effort into saving the matching socket as well.

Which brings me to this Roku Premiere 4620X (“Cooper”) that was given to me for teardown after it was retired. I tried to unsolder its power socket, but I quickly realized I was in trouble. When I put my soldering iron tip on the soldered point and… absolutely nothing happened. Looking at the circuit board I can see there’s a lot of copper tied to ground, which four of five pins on this power socket is attached to. That’s a lot of heat dissipation capacity fighting against my iron’s efforts to melt solder.

I think a hot air rework station might be able to help here, but I don’t have one and my lack of skill means there is a high risk of softening the black plastic as I blast hot air. If I distort the plastic to a point where the power plug could no longer fit, that would defeat the purpose. This concern also definitely ruled out my paint-stripping hot air gun.

I think the best tool for this job is a hot plate designed for installing surface-mount electronics components. Their hot metal surface area could in theory do this work at a lower temperature than blowing hot air. I wouldn’t necessarily need a big one, either. A tiny little one would be enough to do this job.

But I don’t have any of those tools, so I fell back to plan of last resort I call “mechanical separation”. That is my fancy way of saying I whipped out a saw and cut the circuit board around the socket.

Sometime in the future, when I decide I want to reuse this power supply and its matching power socket, I hope to have better tools for the job of separating the socket from its (now much reduced) circuit board.

ESPHome Remote Receiver Test: Simplistic Shooting Game

I salvaged an infrared remote control receiver from a Roku Premier 4620X (“Cooper”) and dumped out some codes using an ESP32 microcontroller running ESPHome software’s Remote Receiver component. This is great, but before I moved on, I ran a simple introduction to actually using it. The “Hello World” of ESPHome remote receiver, so to speak.

The idea is a very simple shooting game. I will add an LED to the breadboard connected to GPIO 18. I will count to five seconds in an on_loop lambda and illuminate the LED using ESPHome GPIO output component. Once illuminated, it will wait for the signal sent by a Roku RC108 remote when the “OK” button is pressed. Once received, I will darken the LED for five seconds before turning it back on. With this very simple game I pretend to “shoot out” the light with my remote.

It was silly and trivially easy as far as shooting games go. Infrared remote controls are designed so the couch potato doesn’t have to aim very accurately for them to work. The emitter sends out the signal in a very wide cone, and the receiver is also happy to receive that signal from within a wide cone. If I am to evolve this into an actually challenging target practice contraption, I would have to figure out how to narrow the cone of effectiveness on the emitter, or the receiver, or both!

But that was not the objective today. Today it was all about dipping my toes in that world before I continued with my Roku teardown. I wanted to keep the hardware trivial and the code simple, so here is the ESPHome code excerpt for this super easy shooting game:

esphome:
  on_loop:
    then:
      - lambda: |-
          if (id(ulNextOn) < millis())
          {
            id(led_01).turn_on();
          }

status_led:
  pin:
    number: 2

output:
  - platform: gpio
    pin:
      number: 18
      inverted: true
    id: led_01

globals:
  - id: ulNextOn
    type: unsigned long
    restore_value: no
    initial_value: '0'

remote_receiver:
  pin:
    number: GPIO36
    inverted: true  
  dump: nec
  tolerance: 10
  on_nec:
    then:
      - lambda: |-
          unsigned long ulTurnOff;
          
          if (0x55AA == x.command)
          {
            id(led_01).turn_off();
            id(ulNextOn) = millis() + 5000;
          }

Roku Premiere (4620X “Cooper”) Infrared Receiver

Looking over the circuit board of a Roku Premiere 4620X (“Cooper”) I saw a lot of things that might be fun to play with but require more skill than I have at the moment. But that’s fine, every electronics hobbyist has to start somewhere, so I’m going to start small with the infrared remote control subsystem.

Consumer infrared (IR) is not standardized, and signals may be sent on several different wavelengths. Since I want to play with the Roku RC108 remote control unit, I needed to remove the infrared receiver of its corresponding Premiere 4620X in order to guarantee I have a matching set. This is a small surface-mount device protected by a small metal shield that I could fold out of the way.

Once the shield was out of the way, I could turn on the Roku and probe its pins with my voltmeter to determine the power supply pin (constant 3.3V) the ground pin, and the signal pin (mostly 3.3V but would drop as I sent signals with the remote.) I then removed this receiver with my soldering iron and connect this tiny part to a set of 0.1″ spacing headers so I could play with it on a breadboard.

In this picture, from top to bottom the pins are:

  • Ground
  • (Not connected)
  • Power 3.3V
  • (Not connected)
  • Active-low signal

I installed it on a breadboard with an ESP32, flashed with ESPHome which is my current favorite way to explore things. In this case, ESPHome has a Remote Receiver component that has decoders for many popular infrared protocols. What if we don’t know which decoder to use? That’s fine, we can set the dump parameter to all which will try every decoder all at once. For this experiment I chose an ESP32 because the of its dedicated remote control (RMT) peripheral for accurate timing while decoding signals. After I get something up and running, I might see if it works on an ESP8266 without the RMT peripheral.

With dump parameter set to all listening to a Roku RC108, I got hits from the JVC, LG, and NEC decoders. And occasionally I would get a RAW message when none of them could understand the signal. If I hold the [up] button, I get one instance of:

[18:55:50][D][remote.jvc:049]: Received JVC: data=0x5743
[18:55:50][D][remote.lg:054]: Received LG: data=0x57439867, nbits=32
[18:55:50][D][remote.nec:070]: Received NEC: address=0xC2EA, command=0xE619

But just the first one. All following hits look like this, and they repeat for as long as I held down the [up] button.

[18:55:50][D][remote.jvc:049]: Received JVC: data=0x5743
[18:55:50][D][remote.lg:054]: Received LG: data=0x57439966, nbits=32
[18:55:50][D][remote.nec:070]: Received NEC: address=0xC2EA, command=0x6699

Then if I press the [down] button on the remote, the first interpreted signal became:

[18:55:52][D][remote.jvc:049]: Received JVC: data=0x5743
[18:55:52][D][remote.lg:054]: Received LG: data=0x5743CC33, nbits=32
[18:55:52][D][remote.nec:070]: Received NEC: address=0xC2EA, command=0xCC33

Then it would repeat the following for as long as [down] was held:

[18:55:53][D][remote.jvc:049]: Received JVC: data=0x5743
[18:55:53][D][remote.lg:054]: Received LG: data=0x5743CD32, nbits=32
[18:55:53][D][remote.nec:070]: Received NEC: address=0xC2EA, command=0x4CB3

Looking at this, it looks like JVC is overeager and doesn’t actually understand the protocol as it failed to differentiate up from down. That leaves LG and NEC decoders. To find out which is closer to the Roku protocol, I started tightening the tolerance parameter from its default of 25%. When I have it tightened to 10%, only the NEC decoder returned results. Even better, each button returns a repeatable and consistent number that is different from all of the others. Even if Roku isn’t actually using a NEC protocol, using the NEC decoder is good enough to understand all its buttons. I used the NEC decoder to generate this lookup table.

Roku Remote ButtonDecoded Command
Back0x19E6
Home0x7C83
Up0x6699
Left0x619E
OK0x55AA
Right0x52AD
Down0x4CB3
Instant Replay0x07F8
Options0x1EE1
Rewind0x4BB4
Pause0x33CC
Fast Forward0x2AD5
Netflix0x34CB
Sling0x58A7
Hulu0x32CD
Vudu0x7788

I think I got lucky this time with the NEC decoder. I had another infrared remote control in my pile of electronics (JVC RM-RK52) and none of the ESPHome decoders could decipher it, just RAW data all the time. Alternatively, it’s possible that remote is on a different infrared wavelength and thus this particular receiver is only picking up fringe gibberish. I’ll put the JVC remote back in the pile until I am in the mood to dig deeper, because right now I want to quickly play with this salvaged infrared system.

Roku Premiere (4620X “Cooper”) Circuit Board

After examining the enclosure of a Roku Premiere model 4620X (“Cooper”) that I took apart, attention turns to the solitary circuit board inside the device. A piece of cast aluminum under its top lid has all the appearance of a heat sink, so the first thing I did was to pop off the thin metal shield to confirm – yep, there’s a microprocessor under there. With a bit of black thermal compound to bridge the small gap between it and the metal shield.

The other metal shield is directly soldered to the board and I couldn’t remove it (nicely) to see what’s inside. So I flipped the board over instead. I see a shield whose shape mirrored the top shield and covers nearly (if not exactly) the same area.

In comparison to its topside counterpart, it has an extra twist in the form of extra metal bridging the center in a “T” pattern. Or maybe a circle with three legs? This must be intentional, but I couldn’t figure out why.

And just for fun, here is the board side-by-side with a Raspberry Pi 4, which has broadly similar specifications of an ARM-powered 4K UHD capable networked device.

Using a cotton swab and some isopropyl alcohol, I cleaned off the thermal compound to read markings on the CPU.

I see two logos: a stylized “M” (MediaTek?) with ARM, and below them the following:

MS09380AMZ-R62-NA1
ATKR524B
1637B

Several connectors are visible around the board, not all of which are used. Starting from the upper left, we have the power connector.

There are five soldered points, but all four along the sides are electrically connected to ground. Only the bottom center point is different, picking up 12V from the AC adapter. Below it is a large round contact point (with a bit of solder) is one of two grounding points for the aluminum heat sink.

To the right is an unpopulated connector also with four surrounding ground points but with three unused electrical contacts. I’m not sure what this would be. My first thought was maybe an alternate video connector, but there aren’t enough pins to be any type of DisplayPort. Composite video or S-Video are too old-school for this 4K-capable video streaming box, so I ruled those out. It is too small to be a pair of RCA jacks for analog audio, so my best guess is a provision for TOSLINK audio.

Next is the HDMI connector, with several meticulously routed differential signal pairs visible.

The final connector on this edge is probably an 8P8C connector for wired Ethernet, with an adjacent unpopulated chip footprint that’s likely to relate to wired networking. Their absence means this particular Roku is WiFi-only.

On the left edge of the board is definitely a switch, electronic schematic symbol for switch and everything. Since there’s already a reset switch on board, this is probably used for a development/test/debug purpose.

On the right edge looks like provision for a USB type-A socket. It may be for similar dev/test/debug purposes, but Roku may have also contemplated the option of a USB port so it can play a slide show of pictures on a USB flash drive. This is a feature I see on many other media boxes.

The bottom of the edge has two antennae, and my RF skills aren’t enough to know what to do with them. A status LED is on the right edge, but I have plenty of LEDs and saw nothing particular special about this one. In between the antennae, though, is a receiver for the infrared remote. I’ve come across similar receivers before, and I always thought “that might be fun to play with” but never did… until now.

Roku Premiere (4620X “Cooper”) Enclosure

I’ve just disassembled a retired Roku Premiere model 4620X, also named “Cooper”. I had expected its enclosure to be just a plastic box, but it turned out to have a few points of interest. The most unexpected item was the Roku fabric tag sticking out the side.

It was clearly a piece of branding, and I thought it was pretty clever how Roku could do that by sandwiching a little piece of fabric into the seam of their enclosure. That would be super simple and inexpensive to manufacture. But then I realized… there’s no seam here! The fabric tag is actually coming out of a dedicated slot in the side of the case. This slot, which is perpendicular to the motion of their plastic injection mold, would have added cost to the process.

And since it’s not sandwiched in an existing seam, it’s not held in place by an existing fastener either. This is a separate piece (or multiple pieces?) of plastic dedicated to a Roku name tag, adding to parts cost and assembly complexity. I thought the Roku fabric tag was a cheap thing to throw in there, but no. This required a very deliberate decision in product design. A little web research found that this is actually a registered Roku trademark. I had originally dismissed it as unimportant, I guess this is why I’m not a hotshot product designer.

A metal plate stamped with “6000000235 A1 REV2” is at the bottom. A small cutout on one edge gives extra clearance for the reset button, and four plastic posts help support the main circuit board. The plate itself was fastened to the plastic enclosure by four blobs of melted plastic.

The four blobs of melted plastic were quickly dispatched with a drill, freeing the plate. There was nothing remarkable on the other side. It seemed to have been stamped out of sheet metal. It is not magnetic, so I am going to guess aluminum. At a weight of roughly 10 grams (about one third of an ounce) it is too light to serve as unnecessary weight designers sometimes add to products for the sake of a “premium feel” heft. It does add a bit of support to the structure, but the enclosure did not feel noticeably flimsier with its removal. Perhaps it adds strength along an axis I didn’t test? There is no mechanical contact with the circuit board, so it is not a heat sink. There are no electrical contacts with the circuit board, either, so it is not an antenna. But it might be an anti-antenna serving as RF shielding. Though RF shields usually have a connection to electrical ground on the circuit, which it lacks. What is the purpose of this metal plate? I’m stumped.

The top plate, in contrast, has an obvious purpose as heat sink for the processor. Its shape hints at a casting process, and it is also nonmagnetic so I’m going to guess aluminum here as well. Imprinted from the casting mold are the markings “6000000233 REV 3 ADC 12 B2” and a circular indicator with seven out of twelve positions filled with a dot and “16” in the center. It probably means something to the people running the manufacturing process but not tome.

I usually see heatsinks from the desktop computer world, where they are precision ground to tight tolerances for optimal contact with the processor. This piece looks to have received no post-processing machining after being cast. Instead, a square of squishy thermal pad takes care of filling the ~1mm gap. It would be less thermally conductive than what is used for desktop processors, but probably just fine in this context. Aside from the raised square section to make contact with the processor, there are two circular posts (upper right and lower left in picture) to electrically ground this piece of metal.

A quick visit by the drill freed this plate as well, and this time its structural support was more noticeable. The lid was pretty flexible once it was removed. It is also a beefier piece of metal at 38g, almost quadruple the weight of bottom plate but still not exactly “heavy”. I doubt the weight is the point of the exercise, so the most likely primary purpose is heat sink for the circuit board.

Roku Premiere (4620X “Cooper”) Teardown

I’ve been gifted two retired Roku devices for teardown. The small streaming stick was straightforward, now it’s time for the far more interesting Roku Premiere. I also have its AC power supply and remote control.

Looking up the model number 4620X listed on the bottom of the case, we find these specifications on Roku’s hardware reference chart:

Device NameRoku Premiere
Code NameCooper
roDeviceInfo.GetModel()4620X
CPUARM Cortex A53 quad core 1.2 GHz
RAM1 GB
Accelerated Graphics APIOpenGL ES 2.0
Max UI Resolution1920X1080
Max Playback Resolution4K UHD, 60fps
HDR Supportn/a
IDK SupportNo

Whereas the streaming stick was roughly analogous to a Raspberry Pi Zero, the 4K UHD capabilities here put this item closer to a Raspberry Pi 4. A more capable piece of hardware that is fed more electrical power as well. Its power supply (model PA-1120-42RU) is specified to deliver 12 volts DC at up to 1 amp.

Unlike a streaming stick, a Premiere can be set in line of sight of the user so its remote control (model RC108) is infrared. I plan to play with this later.

I see a seam around the top of this enclosure, and a bit of prying could release some plastic clips. But they would immediately snap back. I suspect some fasteners are hidden under the bottom, which is a soft rubbery surface that gives the device good traction to resist sliding around.

I had expected annoying strong glue to hold this in place, but it actually peeled off easily. Not as easily as normal cellophane (“Scotch”) tape, more like packing tape or duct tape.

I see my primary target: four Philips-head screws. I also see the reset button through a window in the case, a hard nub on the rubber base helps us push it when needed. Towards the upper left of this picture, we can see another window exposing test and/or debug points.

Those four Philips-head screws were revealed to be self-tapping plastic screws upon removal. Then I resumed working on the lid, and this time its clips could be freed and stay freed.

Once clips were freed, the lid could be removed exposing a circuit board.

There is only one layer to the circuitry, below that is the bottom of the case.

Here are the components laid out.

There were a few features that caught my interest that’s worth a closer look, starting with its external enclosure.

Roku Streaming Stick (3500X “Sugarland”) Teardown

A friend gave me this retired Roku streaming stick to take apart. Before I did, I looked to see if I could do something fun in the software realm and found the Roku IDK. Sadly this device lacks IDK support so it is getting taken apart.

A streaming stick is pretty simple piece of hardware. The device itself has two connections: an HDMI plug to go into your TV, and a micro-USB port for power. A reset button is the lone user input, and a LED the lone user output. The power supply looks like a standard AC powered USB power supply advertised to deliver up to 1A at 5V, but it has Roku branding which is more than what some other devices ship with. This device should also have a radio frequency (RF) remote control instead of the usual infrared, since infrared requires line-of-sight and that won’t work for a streaming stick behind the TV. But I was not given the remote, or I have lost it.

On the back I see a model number of 3500X. Roku’s hardware reference chart lists the following information for 3500X:

Device NameRoku Streaming Stick
Code NameSugarland
roDeviceInfo.GetModel()3500X
CPUARM11 600 MHz
RAM512 MB
Accelerated Graphics APIOpenGL ES 2.0
Max UI Resolution1280X720
Max Playback Resolution1280X720
HDR Supportn/a
IDK SupportNo

Based on these specifications, the hardware within is less powerful than a Raspberry Pi Zero. The latter has a CPU running at a higher speed, double the RAM, and could output 1080p resolution UI. However, video playback on the Pi is not its greatest suit. In contrast, video playback is a Roku’s main purpose, so I assume it has access to video acceleration that Broadcom has limited access to Pi.

Using an iFixit opening tool, I pried against a visible seam on the back and quickly unsnapped six clips holding the enclosure together. The circuit board was removed without fuss.

There’s not a whole lot to see on the back. There is a large IC under the sticker, and an array of test points in the upper left. Probably a debug header for the onboard processor, but that’s beyond my hardware skill today.

A thin metal shield covers most of the front side. Visibly outside the shield is the LED, the reset button, and antenna 1 and 2. Once the thin metal shield was removed, we could see the main processor with the following markings:

Broadcom
BCM43236BKMLG
HE1537 P21
5383606 3 W

To its right are two smaller chips, and to its left, a chip by Samsung whose markings were tall and narrow and very difficult to read.

Here is a Raspberry Pi Zero WH (Wireless Header) next to the streaming stick, a fun comparison as these two share some similarities in functionality. Even if this Roku streaming stick supported their IDK, for projects that do not involve video playback I would probably choose to use a Raspberry Pi instead. Since IDK is not supported, this circuit board is going to electronic waste. This was a quick teardown, as appetizer for the more interesting Roku Premiere teardown.

Window Shopping Roku IDK (Independent Developer Kit)

I’ve been given a pair of Roku streaming devices that were retired from a friend’s household, as they knew I like to take things apart to look inside. Before I do that, though, I briefly investigated what might be fun to do with intact and functional Roku devices. I was quite pleasantly surprised to learn that Roku has recently (announcement dated October 26th, 2021) released an Independent Developer Kit (IDK) for hobbyists to play with Roku hardware. This is different from their official Software Development Kit (SDK), which is available to companies like Netflix to create their Roku apps (“channels”). Many other differences between the IDK and SDK are explained in their IDK FAQ.

The Roku SDK requires a business partnership with Roku, but the IDK is available to anyone who is willing to work at low level in C++ and has a Linux development machine available to the task. No direct support for Windows or MacOS, but as the resulting binary is uploaded through a web interface, theoretically a Linux virtual machine could be used to run these tools. The list of example apps hint at what is accessible through the IDK: the OpenGL ES API, interface to the Roku remote control, interface for audio playback, and interface for video playback. (Including Wildvine DRM-protected content.) And it sounds like an IDK app has pretty complete control of the machine, as only one IDK can be installed at any given time. If it takes over the Roku shell, that implies control over the entire system even greater than possible with SDK-developed Roku channels.

But I couldn’t test that hypothesis due to the final requirement: a Roku device with IDK support. A chart listing all Roku hardware has a row for “IDK Support” and the old devices I’ve been gifted are both shown as “No”. If I really want to play with the Roku IDK, I’d have to go out and buy my own Roku device with a “Yes” listed on that chart. At the moment I don’t see the advantage of buying Roku hardware for this purpose. On the surface Roku IDK appears less compelling than developer support available on Google Chromecast or Amazon Fire TV devices. Or for ultimate openness, we can go with a Raspberry Pi. Maybe I’ll find a reason for Roku projects in the future, in the meantime these two old devices without IDK support will be disassembled. Starting with the smaller streaming stick.