D-Link DVS-310-1
This is video server provided by D-Link. Known hardware revision: B1. It's VS-2405HBE, OEM device developed by APPRO.
Hardware Highlights
| CPU | Ram | Flash | Network | USB | Serial | JTag |
|---|---|---|---|---|---|---|
| TI TMS320DM365@297MHz | 256MiB | 32MiB | 100Mbit (PoE) | Yes (Unsoldered) | Yes | ? |
Installation
TODO
Original Firmware Info
Flash layout:
root@ /root#cat /proc/mtd dev: size erasesize name mtd0: 02000000 00004000 "nand_image" mtd1: 000fc000 00004000 "bootloader" mtd2: 00100000 00004000 "backup kernel" mtd3: 00200000 00004000 "kernel" mtd4: 00700000 00004000 "rootfs" mtd5: 00100000 00004000 "config data" mtd6: 00400000 00004000 "web page" mtd7: 00a00000 00004000 "firmware" mtd8: 00600000 00004000 "sensor data"
Dmesg info: here
Disk fillness:
root@ /root# df -h Filesystem Size Used Available Use% Mounted on /dev/root 7.0M 6.7M 268.0K 96% / tmpfs 61.5M 0 61.5M 0% /tmp /dev/root 7.0M 6.7M 268.0K 96% /dev/.static/dev tmpfs 10.0M 28.0K 10.0M 0% /dev /dev/mtdblock7 10.0M 5.3M 4.7M 53% /opt/ipnc /dev/mtdblock6 4.0M 3.1M 932.0K 77% /opt/www /dev/mtdblock5 1.0M 80.0K 944.0K 8% /mnt/data /dev/sbulla 494.0K 2.0K 492.0K 0% /mnt/ramdisk
Mount Points:
root@ /root# mount rootfs on / type rootfs (rw) /dev/root on / type jffs2 (ro) ramfs on /etc type ramfs (rw) ramfs on /var type ramfs (rw) proc on /proc type proc (rw) sysfs on /sys type sysfs (rw) tmpfs on /tmp type tmpfs (rw) /dev/root on /dev/.static/dev type jffs2 (ro) tmpfs on /dev type tmpfs (rw) devpts on /dev/pts type devpts (rw) /dev/mtdblock7 on /opt/ipnc type jffs2 (ro) /dev/mtdblock6 on /opt/www type jffs2 (ro) /dev/mtdblock5 on /mnt/data type jffs2 (rw,sync) /dev/sbulla on /mnt/ramdisk type vfat (rw,sync,fmask=0022,dmask=0022,codepage=cp437,iocharset=iso8859-1)
Specific Configuration
Buttons
| BUTTON | GPIO Pin | Event |
|---|---|---|
| Reset | 41 | 0⇒reset |
Leds
| LED | GPIO Pin | Event |
|---|---|---|
| Power | 32 | blinking |
| MMC/SD | ? | bright when mmc/sd active (unsoldered) |
Alarm Inputs/Outputs
The alarm inputs are electrically-isolated by LTV-357T optocouples. The alarm output is electrically-isolated by EPR411A064000 relay.
| DIRECTION | NAME | GPIO Pin | Event |
|---|---|---|---|
| input | DI-1 | 40 | - |
| input | DI-2 | 39 | - |
| output | DO | 38 | - |
Hardware
Info
| Architecture: ARM |
| Vendor: Texas Instruments |
| Bootloader: U-Boot |
| System-On-Chip: TI TMS320DM365 (ARM926EJ-S) |
| CPU/Speed: 297 Mhz |
| Flash-Chip: Samsung K9F5608U0D-PCB0 |
| Flash size: 32 MiB |
| RAM-Chip: Hynix H5PS1G83EFR |
| RAM: 256 MiB (2 x 128) |
| Ethernet: Davicom DM9161BIEP Phy |
| PoE-Chip: LM5071MT |
| RS-485 Chip: ZT3485LEEN |
| RTC-Chip: SPI DS1302 |
| USB: Yes 1 x 2.0 (Unsoldered) |
| Video-Chip: TI TVP5150AM1 |
| Serial: Yes (at pcb header) |
| JTAG: ? |
Photos
Opening the case
Note: This will void your warranty!
- Unscrew the 2 screws on one of sides (no need to unscrew both front and back sides)
- Get the pcb and pull it
The PCB have processor module and main board module.
Photo of bottom side PCBs
Photo of top side PCBs
Photo of top side of main board PCB (CPU-module removed)
Photo of CPU-module PCB (top-side)
Photo of CPU-module PCB (bottob-side)
Serial
How to connect to the Serial Port of this specific device:
The board contains 2 serial ports. To connect console-port, look at the CPU-module PCB photo, and find JP1 (unsoldered 16-pin connector). This connector contains serial port pins:
| PIN | Description |
|---|---|
| 1 | GND |
| 2 | ? |
| 3 | RXD |
| 4 | TXD |
| 5…16 | ? |
Look at "Photo of top side of CPU-module PCB" for soldering. At photos, the cords already soldered to needed pins. The speed is 115200 8N1.
The second serial port is connected to voltage level converter, and used for RS-485 connection to the camera.
Debricking
NOTE, the root password of the original firmware is unknown, but You have access to U-Boot.
Bootloader Info
Before booting kernel, the board boots 3 Bootloaders:
- RBL (rom bootloader), it selects from what device to boot. The board try to boot from nand, but if it fails, it will try to boot from SD/MMC.
- UBL (user bootloader), it's first 16 KiB at the nand memory, this bootloader needed to met RBL requirements.
- U-Boot. Almost 1 MiB allocated for this bootloader (include nvram).
You have full access to U-Boot. To enter into U-Boot menu, just press any key when board started, here is output and "help" cmd:
Booting Catalog Boot Loader BootMode = NAND sensor_test: 0x00000000 update_mode: 0x00000000 load_default: 0x00000000 Starting NAND Copy... Valid MagicNum found. ENTRY POINT = 0x81080000 NUM PAGES = 0x00000130 BLOCK = 0x00000010 PAGE = 0x00000001 LOAD ADDRESS = 0x81080000 DONE Jumping to entry point at 0x81080000. U-Boot 1.3.4 (May 25 2010 - 19:52:11) DM365-IPNC I2C: ready DRAM: 128 MB NAND: NAND device: Manufacturer ID: 0xec, Chip ID: 0x75 (Samsung NAND 32MiB 3,3V 8-bit) Bad block table found at page 65504, version 0x00 Bad block table found at page 65472, version 0x00 32 MiB In: serial Out: serial Err: serial ARM Clock :- 297MHz DDR Clock :- 270MHz Ethernet PHY: GENERIC @ 0x01 Hit any key to stop autoboot: 0 DM365 IPNC :>help ? - alias for 'help' askenv - get environment variables from stdin autoscr - run script from memory base - print or set address offset boot - boot default, i.e., run 'bootcmd' bootd - boot default, i.e., run 'bootcmd' bootm - boot application image from memory bootp - boot image via network using BootP/TFTP protocol cmp - memory compare coninfo - print console devices and information cp - memory copy crc32 - checksum calculation dhcp - invoke DHCP client to obtain IP/boot params echo - echo args to console fsinfo - print information about filesystems fsload - load binary file from a filesystem image go - start application at address 'addr' help - print online help icrc32 - checksum calculation iloop - infinite loop on address range imd - i2c memory display iminfo - print header information for application image imm - i2c memory modify (auto-incrementing) imw - memory write (fill) imxtract- extract a part of a multi-image inm - memory modify (constant address) iprobe - probe to discover valid I2C chip addresses itest - return true/false on integer compare loadb - load binary file over serial line (kermit mode) loads - load S-Record file over serial line loady - load binary file over serial line (ymodem mode) loop - infinite loop on address range ls - list files in a directory (default /) md - memory display mii - MII utility commands mm - memory modify (auto-incrementing) mtest - simple RAM test mw - memory write (fill) nand - NAND sub-system nboot - boot from NAND device nfs - boot image via network using NFS protocol nm - memory modify (constant address) ping - send ICMP ECHO_REQUEST to network host printenv- print environment variables rarpboot- boot image via network using RARP/TFTP protocol reset - Perform RESET of the CPU run - run commands in an environment variable saveenv - save environment variables to persistent storage saves - save S-Record file over serial line setenv - set environment variables sleep - delay execution for some time tftpboot- boot image via network using TFTP protocol version - print monitor version DM365 IPNC :>
Hardware mods
As a beginner, you really should inform yourself about soldering in general and then obtain some practical experience!
SD/MMC LED Mod
TODO The LED may be soldered to PCB to inform users, that SD/MMC card is busy. Just connect resistor 300 Ohm … 1 KOhm into R66 place, and LED into LED1 place.
USB Mod
TODO Both USB-modes are supported (OTG and HOST), but need to add resistors/jumpers to CPU-board, due USB mode must be selected by pin-configuration. Parts needed in main board: USB1, T3, R79, R76, R71, R78, R70, R68.
Video-Output Mod
Find JP2 connector (white) at the top side of main board. It's composite-video output. It works fine as-is, but it would be a good idea to solder operational amplifier, to protect dm365 chip from static electricity.
| PIN | VALUE |
|---|---|
| 1 | VIDEO |
| 2 | GND |
Source Code
- D-Link GPL code for DVS-310-1 B1. Total: 1.6 GiB (contains DVSDK 2.0 components, no sources for AVServer application and TI-modules). It's very old, but usable to determine what gpio pins connected to i/o lines:
- DVS-310-1_FW_v1.00_GPL.tar.gz (various tools)
- lzo-2.03.tar.gz (compression library)
- mv_pro_5.0.tar.gz (montavista tree)
- Gateworks Rincon developed Openwrt patches for DM6446 (very similar CPU):
- They also creates Luci-web module for H264 streaming to multicast.
- ti-modules package contains sources for proprietary part for using H264 and MJPEG hardware encoders.
- They creates patches to kernel to support TVP5150 chip, that used in DVS-310-1
- LeopardBoard SDK (RidgeRun SDK): registration needed
- Using the same kernel as backfire (2.6.32)
- integrated with DVSDK to produce hardware-accelerated H264/MJPEG, MP3/AAC codec's for gstreamer (same as gateworks rincon).
- TI DVSDK: wiki page, for download, you need to register at TI and accept license agreement. This step always needed, if You need hardware-accelerated codecs.
- Contains source code for kernel modules, that utilize DSP functionality (codecs, scalers, face detection, etc.)
- Latest version (DVSDK_4.0) also using linux-2.6.32 as kernel.
Notes
This device selling at various markets (especially at security survillance), the price for this device: ~250$ (June 2011)
| Driver | Description | Status | Connemt |
|---|---|---|---|
| tvp5150 | Video capture | Done | based on this info |
| cq93vc | Audio capture | Done | 8KHz - ok, 16KHz - don't works |
| ds1302 | RTC | Done | |
| mii | ethernet | Partially done | finished in newer patch |
| nand | Flash memory | Done | the mtd table would be changed |
| DSP | Audio/Video codecs | Not done | Need to modify DVSDK makefile to use Linaro compiler instead of CodeSourcery |
ToDo:
- Use TI-tools to compile DSP-related code
- Make gstreamer works at target platform.
- Test luci video streaming application (decoding/encoding).
Development Notes:
The eth0 mac given by U-Boot at commandline argument eth=F0:7D:xx:xx:xx:xx
Tags
toh/d-link/dvs-310-1.txt · Last modified: 2012/02/13 20:37 by ttipok







