projects:zsun-wifi-card-reader
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionLast revisionBoth sides next revision | ||
projects:zsun-wifi-card-reader [2015/09/10 16:47] – emeryth | projects:zsun-wifi-card-reader [2020/01/05 19:57] – [OpenWrt] emeryth | ||
---|---|---|---|
Line 1: | Line 1: | ||
====== Hacking the Zsun WiFi SD Card Reader ====== | ====== Hacking the Zsun WiFi SD Card Reader ====== | ||
+ | {{: | ||
The goal of this project is to learn as much as possible about the Zsun WiFi card reader and run OpenWrt on it to turn it into an awesome wifi device. | The goal of this project is to learn as much as possible about the Zsun WiFi card reader and run OpenWrt on it to turn it into an awesome wifi device. | ||
+ | **UPDATE 2017-09-12** Info about LEDE and USB gadget working \\ | ||
+ | **UPDATE 2016-11-28** Adding some more info about the new PCB revision, thanks to Erik Dorner, who sent me his analysis a long time ago \\ | ||
+ | **UPDATE 2016-04-23** The new PCB is missing a jumper on the RX serial line, see serial port section \\ | ||
+ | **UPDATE 2016-03-16** The second PCB revision has identical software and hardware (apart from optimized minor component layout), flashing works the same \\ | ||
+ | **UPDATE 2016-03-12** We now know that there are at least two different PCB versions of the reader! | ||
+ | **UPDATE 2016-02-21** github mirror at https:// | ||
+ | **UPDATE 2016-01-27** informatic seems to have figured out how to use the original firmware' | ||
=== People Involved === | === People Involved === | ||
- | * [[people: | + | * [[people: |
* [[people: | * [[people: | ||
* [[people: | * [[people: | ||
- | ==== State ==== | + | ==== Current status |
All the important aspects of hardware are understood. \\ | All the important aspects of hardware are understood. \\ | ||
- | OpenWrt | + | OpenWrt |
+ | |||
+ | ==== What can I do with it? ==== | ||
+ | * Use it for its intended purpose of serving files, duh | ||
+ | * Use as a tiny and pretty good WiFi AP/ | ||
+ | * Play around with OpenWrt | ||
+ | * Use it as the brains of your IoT project | ||
+ | * Buy a dozen and play around with mesh networking | ||
+ | * Use it for distributed WiFi activism like PirateBox or OccupyWiFi, or run a [[https:// | ||
+ | * Host Node.js on it and take your apps to your favorite coffee shop :^) | ||
+ | \\ | ||
+ | {{: | ||
+ | |||
+ | Size comparison with a single 18650 cell powerbank. | ||
==== Hardware ==== | ==== Hardware ==== | ||
Line 23: | Line 45: | ||
\\ | \\ | ||
The device consists of two PCBs sandwiched together and connected via 8 pins.\\ | The device consists of two PCBs sandwiched together and connected via 8 pins.\\ | ||
+ | **WARNING** There are at least 2 PCB revisions, our original research was on the " | ||
+ | The new revision has optimized layout with some minor changes, software is identical. | ||
+ | |||
The bottom PCB contains only the SD card reader chip and SD slot, it can be safely removed without affecting operation. | The bottom PCB contains only the SD card reader chip and SD slot, it can be safely removed without affecting operation. | ||
+ | **This is only true for the old PCB revision!** The new revision moved the 3.3V regulator to the PCB with the card reader. | ||
+ | |||
=== Serial Port === | === Serial Port === | ||
Line 29: | Line 56: | ||
The serial console is brought out on testpoints (see pictures). | The serial console is brought out on testpoints (see pictures). | ||
Bitrate is 115200. | Bitrate is 115200. | ||
+ | |||
+ | Original firmware root password is " | ||
+ | |||
+ | The new PCB has a missing jumper that connects the serial RX testpad to the SoC. Short it or solder directly to the lower pad of the jumper to use serial. | ||
+ | (The second missing resistor is a pull up/down, I guess) | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Thanks to Andreas H. for the clear picture of the new PCB. | ||
=== Ethernet Port === | === Ethernet Port === | ||
- | There are also testpoints for connecting an ethernet port.\\ | + | There are testpoints for connecting an ethernet port (eth1 of the SoC).\\ |
Use a Magjack or similar connector with magnetics.\\ | Use a Magjack or similar connector with magnetics.\\ | ||
This port is required for uploading images to u-boot.\\ | This port is required for uploading images to u-boot.\\ | ||
+ | |||
+ | Here's how to properly connect the ethernet port, thanks to **Erik Dorner**: \\ | ||
+ | |||
+ | The AR9331 uses a current-mode line driver, which, in practical terms, means that the center taps of the primary coils of the Ethernet transformer must be connected to the PHY power supply voltage (2.0V for the AR9331).\\ | ||
+ | The SoC is capable of producing this voltage, but it needs some external components (a general purpose PNP transistor and some filter/ | ||
+ | Fortunately, | ||
+ | |||
+ | {{: | ||
+ | |||
+ | If you don't care that much, you can connect 3.3V to the center taps, it should work. | ||
=== USB switch === | === USB switch === | ||
The device contains a WAS7227Q USB switch, which connects the sd card reader chip to either the USB plug, or the AR9331 SoC.\\ | The device contains a WAS7227Q USB switch, which connects the sd card reader chip to either the USB plug, or the AR9331 SoC.\\ | ||
- | The switch is controlled with GPIO21. | + | The switch is controlled with GPIO21. |
+ | |||
+ | === GPIO === | ||
+ | |||
+ | * GPIO0 - LED | ||
+ | * GPIO18 - card reader reset | ||
+ | * GPIO21 - USB switch | ||
+ | * GPIO22 - card detect | ||
+ | |||
+ | |||
+ | ==== Hardware hacking ==== | ||
+ | |||
+ | If you remove the card reader board you get easy access to one USB port and 3 GPIO pins. | ||
+ | **Remember that GPIO is 2.5V!** | ||
+ | |||
+ | === GPIO pins and bootstrap === | ||
+ | |||
+ | Here's a closeup of the bootstrap GPIO pins, perhaps useful if you want to try enabling USB device mode. | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Bootstrap functions: | ||
+ | * GPIO 0 : Crystal frequency of external clock 0=25, 1=40 MHz | ||
+ | * GPIO 1 : Booting from internal 0=ROM, 1=SPI Flash | ||
+ | * GPIO 11: 0=General JTAG, 1=CPU ICE | ||
+ | * GPIO 12/28 : external memory type (00=SDR, 01=DDR, 10=DDR2) | ||
+ | * GPIO 13: USB mode 0=device, 1=host | ||
+ | * GPIO 16: Download firmware from 0=USB, 1=MDIO | ||
+ | |||
+ | |||
+ | === USB device mode === | ||
+ | |||
+ | AR9331 is capable of working as a usb device (gadget). | ||
+ | < | ||
+ | http:// | ||
+ | |||
+ | **The USB device/ | ||
+ | |||
+ | (It's not in the 17.01 stable release, though) | ||
+ | |||
+ | So if you want to use the zsun as a USB gadget you will need to: | ||
+ | - < | ||
+ | - Remove the G13 bootstrap resistor setting USB to host mode | ||
+ | - < | ||
+ | |||
+ | |||
+ | Here's what it looks like on the old PCB with the pins connected to the original USB plug: | ||
+ | |||
+ | {{: | ||
+ | ==== Original firmware ==== | ||
+ | |||
+ | The original firmware is full of holes, including an always on telnet backdoor on port 11880. | ||
+ | Source: [[http:// | ||
+ | |||
+ | Regular telnet might not work ('' | ||
+ | |||
+ | < | ||
+ | $ socat - TCP4: | ||
+ | ������!���� | ||
+ | (none) login: root | ||
+ | root | ||
+ | Password: zsun1188 | ||
+ | |||
+ | Welcome to | ||
+ | | ||
+ | / | ||
+ | / | ||
+ | __|__ | ||
+ | | ||
+ | 深圳至上移动科技有限公司 | ||
+ | Shenzhen Zsun Cloud Technology Co., LTD. | ||
+ | www.zsuncloud.com | ||
+ | |||
+ | BusyBox v1.01 (2014.12.27-02: | ||
+ | Enter ' | ||
+ | |||
+ | ~ # | ||
+ | </ | ||
+ | |||
+ | If you want to use proper telnet just run it on different port with: | ||
+ | < | ||
+ | |||
+ | |||
+ | ==== OpenWrt ==== | ||
+ | |||
+ | |||
+ | **WARNING** Still under development \\ | ||
+ | My OpenWrt port, based on the 15.05 "Chaos Calmer" | ||
+ | https:// | ||
+ | |||
+ | **You have to clone the " | ||
+ | git clone -b zsun https:// | ||
+ | |||
+ | Github mirror: | ||
+ | https:// | ||
+ | |||
+ | Compiled images and image builder: \\ | ||
+ | < | ||
+ | https:// | ||
+ | |||
+ | **You cannot use kernel modules from the official repository, use the image builder or compile them yourself if they' | ||
+ | |||
+ | This port sticks to the original flash layout. \\ | ||
+ | I've added a few things to this port to make it more usable on the zsun without having to solder. | ||
+ | * Wifi is enabled by default, AP mode, no encryption | ||
+ | * Entering failsafe will run a script that automatically does a factory reset | ||
+ | * The SD card detect pin is registered as a button and will trigger failsafe when inserted/ | ||
+ | * The SD card reader is reset every time a card is inserted or removed | ||
+ | |||
+ | |||
+ | ==== LEDE ==== | ||
+ | |||
+ | https:// | ||
+ | |||
+ | I've made a quick port of LEDE: | ||
+ | https:// | ||
+ | |||
+ | **good news:** | ||
+ | It has USB gadget | ||
+ | |||
+ | **bad news:** | ||
+ | The standard LEDE kernel is too big to fit in the original kernel partition. | ||
+ | You need to either change the bootloader and flash layout, or decrease the kernel image size by disabling things like debug symbols. | ||
+ | |||
+ | |||
+ | ==== Backing up the original firmware ==== | ||
+ | |||
+ | \\ | ||
+ | **YOU SHOULD DO THIS BEFORE ATTEMPTING TO FLASH** \\ | ||
+ | At the end of the flash chip there is an " | ||
+ | You can backup the entire flash over telnet by using dd. | ||
+ | |||
+ | < | ||
+ | |||
+ | **Do this with all the mtd partitions (mtd0 to mtd5)** | ||
+ | |||
+ | Then make a symlink to /tmp in /etc/disk so you can download the files via the web interface. | ||
+ | |||
+ | |||
+ | < | ||
+ | ==== Flashing ==== | ||
+ | |||
+ | Here are some ways you can flash the device: | ||
+ | - Solder on an ethernet jack and flash from the original uboot (hard but safe) | ||
+ | - Reflash the bootloader from the original firmware to one that supports upload over serial (less soldering but fatal if you mess up) | ||
+ | - Reflash the firmware from the original firmware using mtd_write (easy but you have to do it right on the first try) | ||
+ | - Attach a programmer to the flash chip (impossible to mess up) | ||
+ | - Use the original firmware' | ||
+ | |||
+ | |||
+ | === Flashing with original uboot === | ||
+ | |||
+ | Attach an ethernet jack and serial cable, setup a TFTP server on your PC with a static IP 10.168.168.10 | ||
+ | |||
+ | Then at the uboot prompt enter the following commands: | ||
+ | |||
+ | < | ||
+ | tftpboot 80060000 openwrt.bin | ||
+ | erase 9f020000 +${filesize} | ||
+ | cp.b 80060000 9f020000 ${filesize} | ||
+ | </ | ||
+ | |||
+ | Where openwrt.bin is your rootfs+kernel image (in that order! and the kernel must be at the correct offset!), that is **openwrt-ar71xx-generic-zsun-sdreader-squashfs-sysupgrade.bin** if you're using our image. | ||
+ | |||
+ | |||
+ | === Flashing from original firmware (mtd_write) === | ||
+ | |||
+ | **WARNING** **This method is risky, you have only one chance to get it right.** However if you fail to do so, you still can use above method (unless you completely screw it up by overwriting u-boot, but that's pretty unlikely) | ||
+ | |||
+ | The method could use some improvement, | ||
+ | |||
+ | There are multiple ways to get files onto zsun rootfs, one of which is TFTP (pretty easy to setup, no need for SD card) | ||
+ | To start TFTP server on your Linux computer you can use dnsmasq, like this: | ||
+ | < | ||
+ | # serves files off your current directory, remember to chmod o+r files you'd like to use</ | ||
+ | |||
+ | Then download your files onto zsun's /tmp (ramfs is mounted there), just to be safe, and write them with mtd_write. | ||
+ | Keep in mind **you have to flash kernel first**, since rootfs is used by running system. | ||
+ | |||
+ | **To be extra safe, you can kill all processes that are not telentd and your shell.** | ||
+ | It has been shown that flashing can succeed without this, but you never know. | ||
+ | |||
+ | < | ||
+ | $ socat - TCP4: | ||
+ | (none) login: root | ||
+ | Password: zsun1188 | ||
+ | |||
+ | [...] | ||
+ | |||
+ | # cd /tmp | ||
+ | # tftp -g 10.168.168.100 -r openwrt-ar71xx-generic-zsun-sdreader-kernel.bin | ||
+ | # tftp -g 10.168.168.100 -r openwrt-ar71xx-generic-zsun-sdreader-rootfs-squashfs.bin | ||
+ | # cat /proc/mtd | ||
+ | dev: size | ||
+ | mtd0: 00010000 00010000 " | ||
+ | mtd1: 00010000 00010000 " | ||
+ | mtd2: 00e90000 00010000 " | ||
+ | mtd3: 00130000 00010000 " | ||
+ | mtd4: 00010000 00010000 " | ||
+ | mtd5: 00010000 00010000 " | ||
+ | # mtd_write write openwrt-ar71xx-generic-zsun-sdreader-kernel.bin /dev/mtd3 | ||
+ | Unlocking /dev/mtd3 ... | ||
+ | Writing from openwrt-ar71xx-generic-zsun-sdreader-kernel.bin to /dev/mtd3 ... [w] | ||
+ | # mtd_write write openwrt-ar71xx-generic-zsun-sdreader-rootfs-squashfs.bin /dev/mtd2 | ||
+ | Unlocking /dev/mtd2 ... | ||
+ | Writing from openwrt-ar71xx-generic-zsun-sdreader-rootfs-squashfs.bin to /dev/mtd2 ... [w] | ||
+ | Bus error | ||
+ | </ | ||
+ | |||
+ | "//Bus error//" | ||
+ | |||
+ | === Using the original firmware' | ||
+ | |||
+ | Device can be flashed without any special tools even in Windows by copying special update package with SMB/Network Shares and opening two URLs. More information here: | ||
+ | [[projects: | ||
==== Pictures ==== | ==== Pictures ==== | ||
- | {{: | + | {{: |
- | {{: | + | {{: |
- | {{: | + | {{: |
+ | {{: | ||
+ | {{: |
projects/zsun-wifi-card-reader.txt · Last modified: 2020/02/12 16:14 by emeryth