mirror of https://github.com/OpenIPC/wiki.git
				
				
				
			
		
			
				
	
	
		
			796 lines
		
	
	
		
			29 KiB
		
	
	
	
		
			Markdown
		
	
	
			
		
		
	
	
			796 lines
		
	
	
		
			29 KiB
		
	
	
	
		
			Markdown
		
	
	
| # Chacon IPCAM-RI01
 | |
| 
 | |
| 
 | |
| 
 | |
| [Product datasheet](https://chacon.com/datasharing/doc/IPCAM-RI01/ipcam-ri01_user_manual.pdf)
 | |
| 
 | |
| This camera is a rebranding of a manufacturing company identified by "PPStrong".
 | |
| I'm sure there are other cameras out there that are using the same hardware (or similar with minor changes).
 | |
| 
 | |
| ## Hardware
 | |
| 
 | |
| | System | Description                          |
 | |
| |--------|--------------------------------------|
 | |
| | SoC    | HI3518EV300                          |
 | |
| | Sensor | JXF23                                |
 | |
| | Flash  | 16Mb (XM25QH128A) or 8Mb (XM25QH64A) |
 | |
| | WiFi   | RTL8188FU                            |
 | |
| 
 | |
| ### OpenIPC status
 | |
| 
 | |
| | Component     | Status                                                   |
 | |
| |---------------|----------------------------------------------------------|
 | |
| | WiFi          | [Working](https://github.com/OpenIPC/firmware/issues/48) |
 | |
| | Motors        | [Working](#motor-driver) (patched driver)                |
 | |
| | Red/Blue LEDs | [Working](#leds)                                         |
 | |
| | IR LED        | Working                                                  |
 | |
| | IR Cut        | Working                                                  |
 | |
| 
 | |
| 
 | |
| ### Hardware details
 | |
| 
 | |
| The camera mainboard is identified by "SPEED5S-H1MB_F23".
 | |
| 
 | |
| 
 | |
| At the top of the mainboard:
 | |
| - a micro sdcard slot on the right
 | |
| - connector labeled "IR" powers the IR LED, a red LED and a blue LED
 | |
| - connector "ICR" powers the IR cut filter
 | |
| - non-identified connector is an input for the microphone
 | |
| - SPI NOR flash chip (QH128A)
 | |
| 
 | |
| 
 | |
| 
 | |
| At the bottom of the mainboard:
 | |
| - SoC Hi3518EV300
 | |
| - WiFi module RTL8188FTV
 | |
| - Reset switch
 | |
| - Connectors (top to bottom):
 | |
|   - Power (5V from a micro usb connector)
 | |
|   - Tilt/vertical stepper motor
 | |
|   - Pan/horizontal stepper motor
 | |
|   - Speaker
 | |
| - UART pins at the lower left
 | |
| 
 | |
| ### SoC
 | |
| [Hi35218EV300](https://www.hisilicon.com/en/products/smart-vision/consumer-camera/IOTVision/Hi3518EV300)
 | |
| - ARM Cortex-A7@ 900 MHz
 | |
| - 64Mb DDR2
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| ### Wifi
 | |
| [RTL8188FTV](https://www.realtek.com/en/products/communications-network-ics/item/rtl8188ftv)
 | |
| - 802.11b/g/n 2.4G
 | |
| - USB interface
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| ### SPI NOR flash
 | |
| [XM25QH128A](https://www.xmcwh.com/en/site/product_con/200)
 | |
| - 16Mb SPI NOR Flash
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| ### UART pins (serial port)
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| ### GPIOs
 | |
| 
 | |
| | nr        | Description   |
 | |
| |-----------|---------------|
 | |
| | 0x0f (15) | irCut_1       |
 | |
| | 0x0c (12) | irCut_2       |
 | |
| | 0x28 (40) | IR LED        |
 | |
| | 0x33 (51) | Red LED       |
 | |
| | 0x32 (50) | Blue LED      |
 | |
| | 0x0d (13) | wlan power    |
 | |
| | 0x00 (0)  | AcShdn        |
 | |
| | 0x09 (9)  | Reset button  |
 | |
| | 0x3b (59) | Tilt motor A1 |
 | |
| | 0x3a (58) | Tilt motor A2 |
 | |
| | 0x39 (57) | Tilt motor B1 |
 | |
| | 0x38 (56) | Tilt motor B2 |
 | |
| | 0x47 (71) | Pan motor A1  |
 | |
| | 0x45 (69) | Pan motor A2  |
 | |
| | 0x46 (70) | Pan motor B1  |
 | |
| | 0x44 (68) | Pan motor B2  |
 | |
| 
 | |
| ### Mods
 | |
| #### USB Serial port
 | |
| 
 | |
| There is a micro usb connector to power the camera and with some soldering this connector can be also be used for a serial to usb converter.
 | |
| If you find it hard to solder the wires on the camera micro usb connector get a [micro usb breakout board](https://www.google.com/search?q=micro+usb+breakout+board&tbm=isch).
 | |
| 
 | |
| 
 | |
| 
 | |
| 1. Get a 3.3V TTL to USB converter (using a cheap pl2303hx one)
 | |
| 2. Remove the USB-A connector and pins
 | |
| 3. Connect the camera micro usb port to the converter
 | |
| 4. Connect the camera uart to the converter
 | |
| 
 | |
| 
 | |
| ## Original firmware
 | |
| 
 | |
| The camera uBoot is password protected with "pps_password".
 | |
| 
 | |
| ### Creating a backup
 | |
| To back up the original firmware you need a USB serial adapter connected to the board and a sdcard.
 | |
| 
 | |
| Find out your flash chip size:
 | |
| ```
 | |
| pps # getinfo spi
 | |
| Block:64KB Chip:8MB*1
 | |
| D:0x20 0x70 0x17
 | |
| Name:"XM25QH64AHIG"
 | |
| ```
 | |
| 
 | |
| uBoot commands to back up the entire flash memory on the sdcard (**all sdcard contents will be lost**).
 | |
| Depending on your camera flash memory size replace \<size1\>/\<size2\> with:
 | |
| - 0x800000/0x4000 for 8M flash
 | |
| - 0x1000000/0x8000 for a 16Mb flash
 | |
| (size2 = size1 / 512)
 | |
| 
 | |
| ```
 | |
| sf probe
 | |
| sf read 0x40000000 0 <size1>
 | |
| mmc write 0 0x40000000 0 <size2>
 | |
| ```
 | |
| 
 | |
| Example output (8Mb flash):
 | |
| ```
 | |
| pps # sf probe
 | |
| pps # sf read 0x40000000 0 0x800000
 | |
| device 0 whole chip
 | |
| 
 | |
| SF: 8388608 bytes @ 0x0 Read: OK
 | |
| pps # mmc write 0 0x40000000 0 0x4000
 | |
| had init
 | |
| 
 | |
| MMC write: dev # 0, block # 0, count 16384 ... had init
 | |
| 16384 blocks written: OK
 | |
| pps # 
 | |
| ```
 | |
| 
 | |
| This will write the entire flash to the mmc card in "raw mode" (no filesystem).
 | |
| 
 | |
| **WARNING**: if you leave the card inserted in the camera, and it boots the original FW, the card will be formated and the backup lost!
 | |
|   
 | |
| Then to save the dump to a file, insert the card in a system running linux and:
 | |
| ```
 | |
| dd if=/dev/mmcblk0 of=./flash_backup.bin bs=512 count=<size2>
 | |
| ```
 | |
| 
 | |
| 
 | |
| ### cat /proc/mtd
 | |
| 
 | |
| 8Mb flash version
 | |
| ```
 | |
| dev:    size   erasesize  name
 | |
| mtd0: 00030000 00010000 "bld"     196608        0
 | |
| mtd1: 00010000 00010000 "env"     65536         196608
 | |
| mtd2: 00010000 00010000 "enc"     65536         262144
 | |
| mtd3: 00010000 00010000 "sysflg"  65536         327680
 | |
| mtd4: 00310000 00010000 "sys"     3211264       393216
 | |
| mtd5: 00420000 00010000 "app"     4325376       3604480
 | |
| mtd6: 00070000 00010000 "cfg"     458752        7929856 - 8388608
 | |
| ```
 | |
| 
 | |
| 16Mb flash version
 | |
| ```
 | |
| dev:    size   erasesize  name
 | |
| mtd0: 00060000 00010000 "bld"     393216        0
 | |
| mtd1: 00010000 00010000 "env"     65536         393216
 | |
| mtd2: 00010000 00010000 "enc"     65536         458752
 | |
| mtd3: 00010000 00010000 "sysflg"  65536         524288
 | |
| mtd4: 00380000 00010000 "sys"     3670016       589824
 | |
| mtd5: 00680000 00010000 "app"     6815744       4259840
 | |
| mtd6: 00180000 00010000 "cfg"     1572864       11075584
 | |
| mtd7: 00100000 00010000 "recove"  1048576       12648448
 | |
| mtd8: 002d0000 00010000 "user"    2949120       13697024
 | |
| mtd9: 00020000 00010000 "oeminfo" 131072        16646144 - 16777216
 | |
| ```
 | |
| 
 | |
| 
 | |
| ### dmesg
 | |
| ```
 | |
| Booting Linux on physical CPU 0x0
 | |
| Linux version 4.9.37
 | |
| CPU: ARMv7 Processor [410fc075] revision 5 (ARMv7), cr=10c53c7d
 | |
| CPU: div instructions available: patching division code
 | |
| CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
 | |
| OF: fdt:Machine model: Hisilicon HI3518EV300 DEMO Board
 | |
| Memory policy: Data cache writeback
 | |
| On node 0 totalpages: 9472
 | |
| free_area_init_node: node 0, pgdat c0565e98, node_mem_map c24a9000
 | |
|   Normal zone: 74 pages used for memmap
 | |
|   Normal zone: 0 pages reserved
 | |
|   Normal zone: 9472 pages, LIFO batch:1
 | |
| CPU: All CPU(s) started in SVC mode.
 | |
| pcpu-alloc: s0 r0 d32768 u32768 alloc=1*32768
 | |
| pcpu-alloc: [0] 0
 | |
| Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 9398
 | |
| Kernel command line: mem=37M console=ttyAMA0,115200n8 mtdparts=hi_sfc:192k(bld)ro,64k(env)ro,64k(enc)ro,64k(sysflg)ro,3136k(sys),4224k(app),448k(cfg) ppsAppParts=5 ppsWatchInitEnd
 | |
| PID hash table entries: 256 (order: -2, 1024 bytes)
 | |
| Dentry cache hash table entries: 8192 (order: 3, 32768 bytes)
 | |
| Inode-cache hash table entries: 4096 (order: 2, 16384 bytes)
 | |
| Memory: 31728K/37888K available (3575K kernel code, 121K rwdata, 904K rodata, 888K init, 146K bss, 6160K reserved, 0K cma-reserved)
 | |
| Virtual kernel memory layout:
 | |
|     vector  : 0xffff0000 - 0xffff1000   (   4 kB)
 | |
|     fixmap  : 0xffc00000 - 0xfff00000   (3072 kB)
 | |
|     vmalloc : 0xc2800000 - 0xff800000   ( 976 MB)
 | |
|     lowmem  : 0xc0000000 - 0xc2500000   (  37 MB)
 | |
|     modules : 0xbf000000 - 0xc0000000   (  16 MB)
 | |
|       .text : 0xc0008000 - 0xc0386068   (3577 kB)
 | |
|       .init : 0xc046a000 - 0xc0548000   ( 888 kB)
 | |
|       .data : 0xc0548000 - 0xc05664e0   ( 122 kB)
 | |
|        .bss : 0xc0568000 - 0xc058ca60   ( 147 kB)
 | |
| SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
 | |
| NR_IRQS:16 nr_irqs:16 16
 | |
| Gic dist init...
 | |
| arm_arch_timer: Architected cp15 timer(s) running at 50.00MHz (phys).
 | |
| clocksource: arch_sys_counter: mask: 0xffffffffffffff max_cycles: 0xb8812736b, max_idle_ns: 440795202655 ns
 | |
| sched_clock: 56 bits at 50MHz, resolution 20ns, wraps every 4398046511100ns
 | |
| Switching to timer-based delay loop, resolution 20ns
 | |
| clocksource: arm,sp804: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 637086815595 ns
 | |
| Console: colour dummy device 80x30
 | |
| Calibrating delay loop (skipped), value calculated using timer frequency.. 100.00 BogoMIPS (lpj=500000)
 | |
| pid_max: default: 32768 minimum: 301
 | |
| Mount-cache hash table entries: 1024 (order: 0, 4096 bytes)
 | |
| Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes)
 | |
| CPU: Testing write buffer coherency: ok
 | |
| Setting up static identity map for 0x40008240 - 0x40008298
 | |
| VFP support v0.3: implementor 41 architecture 2 part 30 variant 7 rev 5
 | |
| clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
 | |
| futex hash table entries: 256 (order: -1, 3072 bytes)
 | |
| pinctrl core: initialized pinctrl subsystem
 | |
| NET: Registered protocol family 16
 | |
| DMA: preallocated 256 KiB pool for atomic coherent allocations
 | |
| Serial: AMBA PL011 UART driver
 | |
| watchdo uboot init end
 | |
| 12040000.uart: ttyAMA0 at MMIO 0x12040000 (irq = 21, base_baud = 0) is a PL011 rev2
 | |
| console [ttyAMA0] enabled
 | |
| 12041000.uart: ttyAMA1 at MMIO 0x12041000 (irq = 22, base_baud = 0) is a PL011 rev2
 | |
| 12042000.uart: ttyAMA2 at MMIO 0x12042000 (irq = 23, base_baud = 0) is a PL011 rev2
 | |
| usbcore: registered new interface driver usbfs
 | |
| usbcore: registered new interface driver hub
 | |
| usbcore: registered new device driver usb
 | |
| clocksource: Switched to clocksource arch_sys_counter
 | |
| NET: Registered protocol family 2
 | |
| TCP established hash table entries: 1024 (order: 0, 4096 bytes)
 | |
| TCP bind hash table entries: 1024 (order: 0, 4096 bytes)
 | |
| TCP: Hash tables configured (established 1024 bind 1024)
 | |
| UDP hash table entries: 256 (order: 0, 4096 bytes)
 | |
| UDP-Lite hash table entries: 256 (order: 0, 4096 bytes)
 | |
| NET: Registered protocol family 1
 | |
| workingset: timestamp_bits=30 max_order=13 bucket_order=0
 | |
| jffs2: version 2.2. (NAND) © 2001-2006 Red Hat, Inc.
 | |
| io scheduler noop registered
 | |
| io scheduler deadline registered (default)
 | |
| io scheduler cfq registered
 | |
| hisi-sfc hisi_spi_nor.0: SPI Nor ID Table Version 1.2
 | |
| hisi-sfc hisi_spi_nor.0: The ID: 0x20 isn't in the BP table, Current device can't not protect
 | |
| hisi-sfc hisi_spi_nor.0: xm25qh64a (Chipsize 8 Mbytes, Blocksize 64KiB)
 | |
| 7 cmdlinepart partitions found on MTD device hi_sfc
 | |
| 7 cmdlinepart partitions found on MTD device hi_sfc
 | |
| Creating 7 MTD partitions on "hi_sfc":
 | |
| 0x000000000000-0x000000030000 : "bld"
 | |
| 0x000000030000-0x000000040000 : "env"
 | |
| 0x000000040000-0x000000050000 : "enc"
 | |
| 0x000000050000-0x000000060000 : "sysflg"
 | |
| 0x000000060000-0x000000370000 : "sys"
 | |
| 0x000000370000-0x000000790000 : "app"
 | |
| 0x000000790000-0x000000800000 : "cfg"
 | |
| dwc3 10030000.hidwc3: Configuration mismatch. dr_mode forced to host
 | |
| xhci-hcd xhci-hcd.0.auto: xHCI Host Controller
 | |
| xhci-hcd xhci-hcd.0.auto: new USB bus registered, assigned bus number 1
 | |
| xhci-hcd xhci-hcd.0.auto: hcc params 0x0220fe6c hci version 0x110 quirks 0x20010010
 | |
| xhci-hcd xhci-hcd.0.auto: irq 54, io mem 0x10030000
 | |
| hub 1-0:1.0: USB hub found
 | |
| hub 1-0:1.0: 1 port detected
 | |
| xhci-hcd xhci-hcd.0.auto: xHCI Host Controller
 | |
| xhci-hcd xhci-hcd.0.auto: new USB bus registered, assigned bus number 2
 | |
| usb usb2: We don't know the algorithms for LPM for this host, disabling LPM.
 | |
| hub 2-0:1.0: USB hub found
 | |
| hub 2-0:1.0: hub can't support USB3.0
 | |
| i2c /dev entries driver
 | |
| hibvt-i2c 12060000.i2c: hibvt-i2c0@100000hz registered
 | |
| hibvt-i2c 12061000.i2c: hibvt-i2c1@100000hz registered
 | |
| hibvt-i2c 12062000.i2c: hibvt-i2c2@100000hz registered
 | |
| sdhci: Secure Digital Host Controller Interface driver
 | |
| sdhci: Copyright(c) Pierre Ossman
 | |
| sdhci-pltfm: SDHCI platform and OF driver helper
 | |
| mmc0: SDHCI controller on 10010000.sdhci [10010000.sdhci] using ADMA in legacy mode
 | |
| mmc1: SDHCI controller on 10020000.sdhci [10020000.sdhci] using ADMA in legacy mode
 | |
| Initializing XFRM netlink socket
 | |
| NET: Registered protocol family 17
 | |
| NET: Registered protocol family 15
 | |
| Key type dns_resolver registered
 | |
| PM: Hibernation image not present or could not be loaded.
 | |
| uart-pl011 12040000.uart: no DMA platform data
 | |
| Freeing unused kernel memory: 888K (c046a000 - c0548000)
 | |
| This architecture does not have kernel memory protection.
 | |
| random: S80network: uninitialized urandom read (4 bytes read)
 | |
| Strnio: loading out-of-tree module taints kernel.
 | |
| pcbversion:,S4S_H1_V10
 | |
| pcb____S4S_H1_V10
 | |
| sensor:,soif23mipi
 | |
| pcbname:,S5S_H1_V10_F23
 | |
| factoryname:,PPSTRONG
 | |
| platform:,C5
 | |
| viewmirrow:,vertical_horizontal
 | |
| mem:,37
 | |
| flash:,8
 | |
| mmz:,27
 | |
|  ###cfg gpio OK name:redLed
 | |
|  cfg gpio err name:syncRedLed
 | |
|  cfg gpio err name:syncBlueLed
 | |
| ==============led init finished
 | |
|  ###cfg gpio OK name:irRed
 | |
|  ###cfg gpio OK name:irCut_1
 | |
|  ###cfg gpio OK name:irCut_2
 | |
|  ###cfg gpio OK name:Restbutton
 | |
|  cfg gpio err name:doorbell_key
 | |
|  ###cfg gpio OK name:wlanPwr
 | |
|  cfg gpio err name:4GPwr
 | |
| wlanPwr,open pwr
 | |
|  ###cfg gpio OK name:AcShdn
 | |
| AcShdn,close pwr
 | |
|  cfg gpio err name:MicShdn
 | |
|  cfg gpio err name:4GPowOn
 | |
|  cfg gpio err name:4GCheck
 | |
|  cfg gpio err name:4GReset
 | |
|  cfg gpio err name:Uart1Rxd
 | |
|  cfg gpio err name:Uart1Txd
 | |
|  cfg gpio err name:GarageDoorOpen
 | |
|  cfg gpio err name:GarageDoorClose
 | |
|  cfg gpio err name:GarageDoorStop
 | |
|  ###cfg gpio OK name:si7020_SDA
 | |
|  ###cfg gpio OK name:si7020_SCL
 | |
| usb 1-1: new high-speed USB device number 2 using xhci-hcd
 | |
|  ###cfg gpio OK name:4wir_Tain1
 | |
|  ###cfg gpio OK name:4wir_Tain2
 | |
|  ###cfg gpio OK name:4wir_Tbin1
 | |
|  ###cfg gpio OK name:4wir_Tbin2
 | |
|  cfg gpio err name:motor_shared
 | |
|  ###cfg gpio OK name:4wir_Pain1
 | |
|  ###cfg gpio OK name:4wir_Pain2
 | |
|  ###cfg gpio OK name:4wir_Pbin1
 | |
|  ###cfg gpio OK name:4wir_Pbin2
 | |
|  rtw_pps_set_runsta ok
 | |
| USB_SPEED_HIGH
 | |
| random: fast init done
 | |
| usbcore: registered new interface driver rtl8188fu
 | |
| ======online_flag = 0, cmos_yuv_flag = 0, sensor=soif23mipi, chip=hi3518ev300, board=meari======
 | |
| meari init success!
 | |
| Module himedia: init ok
 | |
| Hisilicon Media Memory Zone Manager
 | |
| hi_osal 1.0 init success!
 | |
| hi3516ev200_base: module license 'Proprietary' taints kernel.
 | |
| Disabling lock debugging due to kernel taint
 | |
| load sys.ko for Hi3516EV200...OK!
 | |
| load tde.ko for HI3516EV200...OK!
 | |
| load region.ko for Hi3516EV200...OK!
 | |
| load vgs.ko for Hi3516EV200...OK!
 | |
| load vi.ko for Hi3516EV200...OK !
 | |
| ISP Mod init!
 | |
| load vpss.ko for Hi3516EV200...OK!
 | |
| load rc.ko for Hi3516EV200...OK!
 | |
| load venc.ko for Hi3516EV200...OK!
 | |
| load chnl.ko for Hi3516EV200...OK!
 | |
| load vedu.ko for Hi3516EV200...OK!
 | |
| load h264e.ko for Hi3516EV200...OK!
 | |
| load h265e.ko for Hi3516EV200...OK!
 | |
| load jpege.ko for Hi3516EV200...OK!
 | |
| load ive.ko for Hi3516EV200...OK!
 | |
| load mipi_rx driver successful!
 | |
| close app check
 | |
|  ###cfg gpio OK name:blueLed
 | |
|  Strnio_ioctl
 | |
|  recfgcodec
 | |
| start recfgcodec
 | |
|  0xCC----ff031a00
 | |
|  0xCC----aa031a00
 | |
| packets in tx buffer - 0x204=e9000c, 0x200=e9000c
 | |
| sys irq:30
 | |
|  cfg gpio err name:PirInput
 | |
| ____set essid
 | |
| ____set essid
 | |
| ```
 | |
| 
 | |
| ### Starting telnetd
 | |
| 
 | |
| The camera original FW runs a REST server with authentication (user: PpStRoNg, password: #%&wL1@\*tU123zv).
 | |
| 
 | |
| One of the most interesting features is the "runcmd" function (replace \<your_cam_ip\> with your camera IP address):
 | |
| 
 | |
| Send request (note the \\ escaping the & for the password):
 | |
| ```
 | |
| curl -u PpStRoNg:#%\&wL1@*tU123zv -i http://<your_cam_ip>:80/devices/runcmd --request POST --data '{"cmd":"ls"}'
 | |
| HTTP/1.1 200 OK
 | |
| Content-Type: application/json
 | |
| Content-Length: 0
 | |
| ```
 | |
| 
 | |
| Get output (json format):
 | |
| ```
 | |
| curl -u PpStRoNg:#%\&wL1@*tU123zv -i http://<your_cam_ip>:80/devices/runcmd
 | |
| HTTP/1.1 200 OK
 | |
| Content-Type: application/json
 | |
| Content-Length: 129
 | |
| {
 | |
|         "value":        "usr\nsys\netc\nmnt\nlib\nproc\nboot\nopt\nlinuxrc\nbin\ndev\ninit\nhome\nsbin\nnfsroot\nroot\ntmp\nvar\ndevinfo\n"
 | |
| }
 | |
| ```
 | |
| 
 | |
| In the latest FW they have removed the "telnetd" binary, so you need to place it on the sdcard:
 | |
| [telnetd.zip](https://github.com/ljalves/wiki/files/7875319/telnetd.zip)
 | |
| 
 | |
| 
 | |
| To start the server copy the telnetd binary to the sdcard and run:
 | |
| ```
 | |
| curl -u PpStRoNg:#%\&wL1@*tU123zv -i http://<your_cam_ip>:80/devices/runcmd --request POST --data '{"cmd":"echo 'anyone::0:0:root:/:/bin/sh' >> /etc/passwd"}'
 | |
| curl -u PpStRoNg:#%\&wL1@*tU123zv -i http://<your_cam_ip>:80/devices/runcmd --request POST --data '{"cmd":"/mnt/mmc01/telnetd &"}'
 | |
| ```
 | |
| 
 | |
| At this point you should be able to telnet to the camera:
 | |
| ```
 | |
| $ telnet <your_cam_ip>
 | |
| Trying <your_cam_ip>...
 | |
| Connected to <your_cam_ip>.
 | |
| Escape character is '^]'.
 | |
| (none) login: anyone
 | |
| 
 | |
| 
 | |
| BusyBox v1.26.2 (2019-04-16 05:35:27 PDT) built-in shell (ash)
 | |
| 
 | |
| / #
 | |
| ```
 | |
| 
 | |
| 
 | |
| ### [ipctool](https://github.com/OpenIPC/ipctool) output (8Mb flash):
 | |
| 
 | |
| ```
 | |
| /mnt/mmc01 # ./ipctool
 | |
| ---
 | |
| chip:
 | |
|   vendor: HiSilicon
 | |
|   model: 3518EV300
 | |
|   id: 022c40074e0038f1ee70030a0d73b5d32549ab0c81a025e3
 | |
| mdio busy
 | |
| mdio busy
 | |
| ethernet:
 | |
|   mac: "c4:3a:35:75:bf:71"
 | |
|   u-mdio-phyaddr: 0
 | |
|   phy-id: 0x00000000
 | |
|   d-mdio-phyaddr: 0
 | |
| rom:
 | |
|   - type: nor
 | |
|     block: 64K
 | |
|     partitions:
 | |
|       - name: sys
 | |
|         size: 0x310000
 | |
|         sha1: c890f4a1
 | |
|       - name: app
 | |
|         size: 0x420000
 | |
|         sha1: 32c12243
 | |
|       - name: cfg
 | |
|         size: 0x70000
 | |
|         path: /home/cfg,jffs2,rw
 | |
|     size: 7M
 | |
|     addr-mode: 3-byte
 | |
| ram:
 | |
|   total: 64M
 | |
|   media: 27M
 | |
| firmware:
 | |
|   kernel: "4.9.37 (Mon Jul 22 00:51:54 PDT 2019)"
 | |
|   libc: uClibc 0.9.33.2
 | |
|   sdk: "Hi3516EV200_MPP_V1.0.1.0 B050 Release (May  9 2019, 22:51:50)"
 | |
|   main-app: ./ppsapp
 | |
| sensors:
 | |
| - vendor: Silicon Optronics
 | |
|   model: JXF23
 | |
|   control:
 | |
|     bus: 0
 | |
|     type: i2c
 | |
|     addr: 0x80
 | |
|   data:
 | |
|     type: MIPI
 | |
|     input-data-type: DATA_TYPE_RAW_10BIT
 | |
|     lane-id:
 | |
|     - 0
 | |
|     - 1
 | |
|     image: 1920x1080
 | |
|   clock: 27MHz
 | |
| /mnt/mmc01 #
 | |
| ```
 | |
| 
 | |
| 
 | |
| ## OpenIPC firmware
 | |
| 
 | |
| ## Flashing OpenIPC
 | |
| (soon...)
 | |
| 
 | |
| ### Boot dump
 | |
| ```
 | |
| Uncompress Ok!
 | |
| 
 | |
| U-Boot 2016.11-g059901b-dirty (Oct 13 2021 - 20:14:30 +0300)hi3518ev300
 | |
| 
 | |
| Relocation Offset is: 0374a000
 | |
| Relocating to 43f4a000, new gd at 43f09ef0, sp at 43f09ed0
 | |
| SPI Nor:  hifmc_ip_ver_check(44): Check Flash Memory Controller v100 ...hifmc_ip_ver_check(50):  Found
 | |
| hifmc_spi_nor_probe(1709): SPI Nor ID Table Version 1.0
 | |
| hifmc_spi_nor_probe(1734): SPI Nor(cs 0) ID: 0x20 0x70 0x18
 | |
| hifmc_spi_nor_probe(1799): Block:64KB hifmc_spi_nor_probe(1800): Chip:16MB hifmc_spi_nor_probe(1801): Name:"XM25QH128A"
 | |
| hifmc100_spi_nor_probe(147): SPI Nor total size: 16MB
 | |
| NAND:  0 MiB
 | |
| MMC:   hisi-sdhci: 0 (SD)
 | |
| In:    serial
 | |
| Out:   serial
 | |
| Err:   serial
 | |
| Net:   eth0
 | |
| Warning: eth0 (eth0) using random MAC address - 6e:9f:f3:d7:33:35
 | |
| 
 | |
| Hit any key to stop autoboot:  0
 | |
| device 0 offset 0x50000, size 0x200000
 | |
| 
 | |
| SF: 2097152 bytes @ 0x50000 Read: OK
 | |
| ## Booting kernel from Legacy Image at 42000000 ...
 | |
|    Image Name:   Linux-4.9.37-hi3518ev300
 | |
|    Image Type:   ARM Linux Kernel Image (uncompressed)
 | |
|    Data Size:    1891696 Bytes = 1.8 MiB
 | |
|    Load Address: 40008000
 | |
|    Entry Point:  40008000
 | |
|    Loading Kernel Image ... OK
 | |
| 
 | |
| Starting kernel ...
 | |
| 
 | |
| Booting Linux on physical CPU 0x0
 | |
| Linux version 4.9.37 (runner@fv-az241-255) (gcc version 7.5.0 (Buildroot -g29dde73) ) #1 Sun Jan 9 03:44:04 UTC 2022
 | |
| CPU: ARMv7 Processor [410fc075] revision 5 (ARMv7), cr=10c53c7d
 | |
| CPU: div instructions available: patching division code
 | |
| CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
 | |
| OF: fdt:Machine model: Hisilicon HI3518EV300 DEMO Board
 | |
| cmz zone is not set!
 | |
| Memory policy: Data cache writeback
 | |
| CPU: All CPU(s) started in SVC mode.
 | |
| Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 8128
 | |
| Kernel command line: mem=32M console=ttyAMA0,115200 panic=20 rootfstype=squashfs root=/dev/mtdblock3 init=/init mtdparts=hi_sfc:256k(boot),64k(env),2048k(kernel
 | |
| ),5120k(rootfs),-(rootfs_data) mmz_allocator=hisi
 | |
| PID hash table entries: 128 (order: -3, 512 bytes)
 | |
| Dentry cache hash table entries: 4096 (order: 2, 16384 bytes)
 | |
| Inode-cache hash table entries: 2048 (order: 1, 8192 bytes)
 | |
| Memory: 27104K/32768K available (3861K kernel code, 141K rwdata, 872K rodata, 188K init, 179K bss, 5664K reserved, 0K cma-reserved)
 | |
| Virtual kernel memory layout:
 | |
|     vector  : 0xffff0000 - 0xffff1000   (   4 kB)
 | |
|     fixmap  : 0xffc00000 - 0xfff00000   (3072 kB)
 | |
|     vmalloc : 0xc2800000 - 0xff800000   ( 976 MB)
 | |
|     lowmem  : 0xc0000000 - 0xc2000000   (  32 MB)
 | |
|     modules : 0xbf000000 - 0xc0000000   (  16 MB)
 | |
|       .text : 0xc0008000 - 0xc03cd778   (3862 kB)
 | |
|       .init : 0xc04a9000 - 0xc04d8000   ( 188 kB)
 | |
|       .data : 0xc04d8000 - 0xc04fb520   ( 142 kB)
 | |
|        .bss : 0xc04fd000 - 0xc0529fe4   ( 180 kB)
 | |
| SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
 | |
| NR_IRQS:16 nr_irqs:16 16
 | |
| Gic dist init...
 | |
| arm_arch_timer: Architected cp15 timer(s) running at 50.00MHz (phys).
 | |
| clocksource: arch_sys_counter: mask: 0xffffffffffffff max_cycles: 0xb8812736b, max_idle_ns: 440795202655 ns
 | |
| sched_clock: 56 bits at 50MHz, resolution 20ns, wraps every 4398046511100ns
 | |
| Switching to timer-based delay loop, resolution 20ns
 | |
| clocksource: arm,sp804: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 637086815595 ns
 | |
| Console: colour dummy device 80x30
 | |
| Calibrating delay loop (skipped), value calculated using timer frequency.. 100.00 BogoMIPS (lpj=500000)
 | |
| pid_max: default: 32768 minimum: 301
 | |
| Mount-cache hash table entries: 1024 (order: 0, 4096 bytes)
 | |
| Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes)
 | |
| CPU: Testing write buffer coherency: ok
 | |
| Setting up static identity map for 0x40008200 - 0x40008258
 | |
| devtmpfs: initialized
 | |
| VFP support v0.3: implementor 41 architecture 2 part 30 variant 7 rev 5
 | |
| clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
 | |
| futex hash table entries: 256 (order: -1, 3072 bytes)
 | |
| pinctrl core: initialized pinctrl subsystem
 | |
| NET: Registered protocol family 16
 | |
| DMA: preallocated 256 KiB pool for atomic coherent allocations
 | |
| Serial: AMBA PL011 UART driver
 | |
| 12040000.uart: ttyAMA0 at MMIO 0x12040000 (irq = 21, base_baud = 0) is a PL011 rev2
 | |
| console [ttyAMA0] enabled
 | |
| 12041000.uart: ttyAMA1 at MMIO 0x12041000 (irq = 22, base_baud = 0) is a PL011 rev2                                                                             
 | |
| ssp-pl022 12070000.spi: ARM PL022 driver, device ID: 0x00800022
 | |
| ssp-pl022 12070000.spi: mapped registers from 0x12070000 to c286b000
 | |
| ssp-pl022 12071000.spi: ARM PL022 driver, device ID: 0x00800022
 | |
| ssp-pl022 12071000.spi: mapped registers from 0x12071000 to c286f000
 | |
| usbcore: registered new interface driver usbfs
 | |
| usbcore: registered new interface driver hub
 | |
| usbcore: registered new device driver usb
 | |
| clocksource: Switched to clocksource arch_sys_counter
 | |
| NET: Registered protocol family 2
 | |
| TCP established hash table entries: 1024 (order: 0, 4096 bytes)
 | |
| TCP bind hash table entries: 1024 (order: 0, 4096 bytes)
 | |
| TCP: Hash tables configured (established 1024 bind 1024)
 | |
| UDP hash table entries: 256 (order: 0, 4096 bytes)
 | |
| UDP-Lite hash table entries: 256 (order: 0, 4096 bytes)
 | |
| NET: Registered protocol family 1
 | |
| RPC: Registered named UNIX socket transport module.
 | |
| RPC: Registered udp transport module.
 | |
| RPC: Registered tcp transport module.
 | |
| RPC: Registered tcp NFSv4.1 backchannel transport module.
 | |
| workingset: timestamp_bits=30 max_order=13 bucket_order=0
 | |
| squashfs: version 4.0 (2009/01/31) Phillip Lougher
 | |
| jffs2: version 2.2 (NAND) (ZLIB) (RTIME) (c) 2001-2006 Red Hat, Inc.
 | |
| Block layer SCSI generic (bsg) driver version 0.4 loaded (major 252)
 | |
| io scheduler noop registered
 | |
| io scheduler deadline registered (default)
 | |
| pl061_gpio 120b0000.gpio_chip: PL061 GPIO chip @0x120b0000 registered
 | |
| pl061_gpio 120b1000.gpio_chip: PL061 GPIO chip @0x120b1000 registered
 | |
| pl061_gpio 120b2000.gpio_chip: PL061 GPIO chip @0x120b2000 registered
 | |
| pl061_gpio 120b4000.gpio_chip: PL061 GPIO chip @0x120b4000 registered
 | |
| pl061_gpio 120b5000.gpio_chip: PL061 GPIO chip @0x120b5000 registered
 | |
| pl061_gpio 120b6000.gpio_chip: PL061 GPIO chip @0x120b6000 registered
 | |
| pl061_gpio 120b7000.gpio_chip: PL061 GPIO chip @0x120b7000 registered
 | |
| pl061_gpio 120b8000.gpio_chip: PL061 GPIO chip @0x120b8000 registered
 | |
| brd: module loaded
 | |
| loop: module loaded
 | |
| hisi-sfc hisi_spi_nor.0: SPI Nor ID Table Version 1.2
 | |
| hisi-sfc hisi_spi_nor.0: The ID: 0x20 isn't in the BP table, Current device can't not protect
 | |
| @spi_nor_scan(), no "m25p,fast-read".
 | |
| @spi_nor_scan(), modes->rd_modes:0xd.
 | |
| hisi-sfc hisi_spi_nor.0: (Fast) Read:  opcode=BBh, protocol=122, mode=0, wait=8
 | |
| hisi-sfc hisi_spi_nor.0: nor->read_opcode[3: Read; 0B: Fast Read; 3B: Dual; BB: Dual IO; 6B: Quad; EB: Quad IO]: 0xbb.
 | |
| hisi-sfc hisi_spi_nor.0: xm25qh128a (Chipsize 16 Mbytes, Blocksize 64KiB)
 | |
| 5 cmdlinepart partitions found on MTD device hi_sfc
 | |
| 5 cmdlinepart partitions found on MTD device hi_sfc
 | |
| Creating 5 MTD partitions on "hi_sfc":
 | |
| 0x000000000000-0x000000040000 : "boot"
 | |
| 0x000000040000-0x000000050000 : "env"
 | |
| 0x000000050000-0x000000250000 : "kernel"
 | |
| 0x000000250000-0x000000750000 : "rootfs"
 | |
| 0x000000750000-0x000001000000 : "rootfs_data"
 | |
| SPI Nand ID Table Version 2.7
 | |
| Cannot found a valid SPI Nand Device
 | |
| hisi_spi_nand_probe(175): Error: driver probe, result: -19
 | |
| No OTP data, festa PHY use default ATE parameters!
 | |
| festa PHY wait autotrim done timeout!
 | |
| libphy: hisi_femac_mii_bus: probed
 | |
| libphy: Fixed MDIO Bus: probed
 | |
| hisi-femac 10040000.ethernet: connect to PHY failed!
 | |
| xhci-hcd xhci-hcd.0.auto: xHCI Host Controller
 | |
| xhci-hcd xhci-hcd.0.auto: new USB bus registered, assigned bus number 1
 | |
| xhci-hcd xhci-hcd.0.auto: hcc params 0x0220fe6c hci version 0x110 quirks 0x20010010
 | |
| xhci-hcd xhci-hcd.0.auto: irq 116, io mem 0x10030000
 | |
| hub 1-0:1.0: USB hub found
 | |
| hub 1-0:1.0: 1 port detected
 | |
| xhci-hcd xhci-hcd.0.auto: xHCI Host Controller
 | |
| xhci-hcd xhci-hcd.0.auto: new USB bus registered, assigned bus number 2
 | |
| usb usb2: We don't know the algorithms for LPM for this host, disabling LPM.
 | |
| hub 2-0:1.0: USB hub found
 | |
| hub 2-0:1.0: hub can't support USB3.0
 | |
| hibvt_rtc 120e0000.rtc: rtc core: registered 120e0000.rtc as rtc0
 | |
| hibvt_rtc 120e0000.rtc: RTC driver for hibvt enabled
 | |
| i2c /dev entries driver
 | |
| hibvt-i2c 12060000.i2c: hibvt-i2c0@100000hz registered
 | |
| hibvt-i2c 12061000.i2c: hibvt-i2c1@100000hz registered
 | |
| hibvt-i2c 12062000.i2c: hibvt-i2c2@100000hz registered
 | |
| sdhci: Secure Digital Host Controller Interface driver
 | |
| sdhci: Copyright(c) Pierre Ossman
 | |
| sdhci-pltfm: SDHCI platform and OF driver helper
 | |
| mmc0: SDHCI controller on 10010000.sdhci [10010000.sdhci] using ADMA in legacy mode
 | |
| mmc1: SDHCI controller on 10020000.sdhci [10020000.sdhci] using ADMA in legacy mode
 | |
| NET: Registered protocol family 10
 | |
| NET: Registered protocol family 17
 | |
| hibvt_rtc 120e0000.rtc: setting system clock to 1970-01-01 00:00:00 UTC (0)
 | |
| VFS: Mounted root (squashfs filesystem) readonly on device 31:3.
 | |
| devtmpfs: mounted
 | |
| Freeing unused kernel memory: 188K (c04a9000 - c04d8000)
 | |
| This architecture does not have kernel memory protection.
 | |
| mmc0: new high speed SDHC card at address 1234
 | |
| mmcblk0: mmc0:1234 SA08G 7.21 GiB
 | |
|  mmcblk0: p1
 | |
| Starting syslogd: OK
 | |
| Starting klogd: OK
 | |
| Running sysctl: OK
 | |
| Loading modules:Initializing random number generator: OK
 | |
| Saving random seed: OK
 | |
| Starting rngd: OK
 | |
| Starting mdev...
 | |
| F2FS-fs (mmcblk0p1): Can't find valid F2FS filesystem in 1th superblock
 | |
| F2FS-fs (mmcblk0p1): Can't find valid F2FS filesystem in 2th superblock
 | |
| F2FS-fs (mmcblk0p1): Can't find valid F2FS filesystem in 1th superblock
 | |
| F2FS-fs (mmcblk0p1): Can't find valid F2FS filesystem in 2th superblock
 | |
| Starting network: OK
 | |
| Starting ntpd: OK
 | |
| Starting dropbear sshd: OK
 | |
| Starting httpd: OK
 | |
| Starting mini-snmpd: DISABLED, OK
 | |
| Starting telnetd: DISABLED, OK
 | |
| Starting crond: OK
 | |
| mmz_start: 0x42000000, mmz_size: 32M
 | |
| hisilicon: Get data from environment and set SENSOR as jxf23
 | |
| insert audio
 | |
| Bringing wlan0 up...
 | |
| Successfully initialized wpa_supplicant
 | |
| rfkill: Cannot open RFKILL control device
 | |
| udhcpc: started, v1.31.1
 | |
| udhcpc: sending discover
 | |
| udhcpc: sending discover
 | |
| udhcpc: sending discover
 | |
| udhcpc: sending select for 192.168.1.112
 | |
| udhcpc: lease of 192.168.1.112 obtained, lease time 86400
 | |
| deleting routers
 | |
| adding dns 8.8.8.8
 | |
| adding dns 8.8.4.4
 | |
| hisilicon: Check MAC for Xiongmai devices
 | |
| hisilicon: The eth0 interface has a correct MAC - 
 | |
| hisilicon: Loading of kernel modules and initialization of the video system has started
 | |
| Starting majestic: OK
 | |
| 
 | |
| Welcome to OpenIPC v2.1
 | |
| openipc-hi3518ev300 login: 
 | |
| ```
 | |
| 
 | |
| 
 | |
| (soon...)
 | |
| 
 | |
| ### rtl8188fu
 | |
| (soon...)
 | |
| 
 | |
| ### Motor driver
 | |
| 
 | |
| The camera has 2 stepper motors to control the tilt (up/down) and pan (left/right).
 | |
| 
 | |
| Replace the motor driver at /lib/modules/4.9.37/hisilicon/camhi-motor.ko with the one included below.
 | |
| 
 | |
| The .zip file also includes a slightly modified build of the [sample control code](https://github.com/OpenIPC/motors) that you can copy to /bin.
 | |
| 
 | |
| [camhi-motor.zip](https://github.com/ljalves/wiki/files/7873614/camhi-motor.zip)
 | |
| 
 | |
| Usage:
 | |
| ```
 | |
| motor_ctrl -d u        # move/tile up (by default 20 steps)
 | |
| motor_ctrl -d d        # move/tilt down
 | |
| motor_ctrl -d l        # move/pan left
 | |
| motor_ctrl -d r -s 50  # move/pan right by 50 steps
 | |
| ```
 | |
| 
 | |
| ### Majestic sensor/pin configuration
 | |
| 
 | |
| ```
 | |
| image:
 | |
|   mirror: true
 | |
|   flip: true
 | |
| (...)
 | |
| nightMode:
 | |
|   irCutPin1: 15
 | |
|   irCutPin2: 12
 | |
|   backlightPin: 40
 | |
| 
 | |
| ```
 | |
| 
 | |
| ### LEDs
 | |
| The camera has a dual color LED (red/blue) connected to GPIO's 50 and 51.
 | |
| To control those LEDs you can use the /sys api:
 | |
| ```
 | |
| # make the GPIOs accessible
 | |
| echo 50 > /sys/class/gpio/export
 | |
| # and set direction (only need to do once)
 | |
| echo out > /sys/class/gpio50/direction
 | |
| echo out > /sys/class/gpio51/direction
 | |
| 
 | |
| # turn on blue LED
 | |
| echo 1 > /sys/class/gpio50/value
 | |
| # turn off blue LED
 | |
| echo 0 > /sys/class/gpio50/value
 | |
| 
 | |
| # turn on red LED
 | |
| echo 1 > /sys/class/gpio51/value
 | |
| # turn off red LED
 | |
| echo 0 > /sys/class/gpio51/value
 | |
| ```
 |