This Topic is about troubleshooting and investigation the LinkIt Smart Duo 7688, its (mis-)behaviour and troubles if working with an alternative development Environment Arduino.mk without Arduino-IDE.
Programming the AVR on LinkIt Smart 7688 Duo without Arduino-IDE
I am working on a Archlinux, which is usually fresh like supermarket.
AVRDude version 6.3
Arduino Version = 182
Arduino Makefile Version = 1.5
CC Version = 6.3.0 (avr-gcc)
The 7688 seemed to be even fresher than my OS and therefore i needed to add the Target to AVRDudes board.txt. The content can be found from MediaTek-Labs boards.txt, with a variation of the smart7688.build.variant
. If this is defined as =smart7688
as supposed i am getting this error:
/usr/bin/avr-g++ -x c++ -include Arduino.h -MMD -c -mmcu=atmega32u4 -DF_CPU=8000000L -DARDUINO=182 -DARDUINO_ARCH_AVR -D__PROG_TYPES_COMPAT__ -I/usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino -I/usr/share/arduino/hardware/archlinux-arduino/avr/variants/smart7688 -Wall -ffunction-sections -fdata-sections -Os -DUSB_VID=0x0E8D -DUSB_PID=0xAB01 -pedantic -Wall -Wextra -fno-use-cxa-atexit -fno-threadsafe-statics -fdiagnostics-color -fpermissive -fno-exceptions -std=gnu++11 -DHE_ROLE=gateway7688 -DCUSTOM_CONFIG=config_gateway7688.h serial.ino -o ../bin/7688_serial_test/smart7688/serial.ino.o
In file included from <command-line>:0:0:
/usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino/Arduino.h:257:26: fatal error: pins_arduino.h: No such file or directory
#include "pins_arduino.h"
^
compilation terminated.
–If i am changing this to smart7688.build.variant=yun
i can at least compile the sketch–
This is the working boards.txt.
smart7688.name=LinkIt Smart 7688 Duo
smart7688.upload.via_ssh=true
smart7688.vid.0=0x0E8D
smart7688.pid.0=0xAB00
smart7688.vid.1=0x0E8D
smart7688.pid.1=0xAB01
smart7688.upload.tool=avrdude
smart7688.upload.protocol=avr109
smart7688.upload.maximum_size=28672
smart7688.upload.speed=57600
smart7688.upload.disable_flushing=true
smart7688.upload.use_1200bps_touch=true
smart7688.upload.wait_for_upload_port=true
smart7688.bootloader.tool=avrdude
smart7688.bootloader.low_fuses=0xff
smart7688.bootloader.high_fuses=0xd8
smart7688.bootloader.extended_fuses=0xce
smart7688.bootloader.file=caterina/Caterina-smart7688.hex
smart7688.bootloader.unlock_bits=0x3F
smart7688.bootloader.lock_bits=0x2F
smart7688.build.board=AVR_LINKITSMART7688
smart7688.build.mcu=atmega32u4
smart7688.build.f_cpu=8000000L
smart7688.build.vid=0x0E8D
smart7688.build.pid=0xAB01
smart7688.build.usb_product="LinkIt Smart 7688 Duo"
smart7688.build.usb_manufacturer="MediaTek Labs"
smart7688.build.variant=smart7688
#smart7688.build.variant=yun
smart7688.build.extra_flags={build.usb_flags}
To make smart7688.build.variant=smart7688
work we need to provide the pins_arduino.h
file for this target and place it in the $ARDUINO_CORE_PATH/hardware/arduino/avr/variants/smart7688
folder. /usr/share/arduino/hardware/archlinux-arduino/avr/variants/smart7688
in my case Archlinux and make it readable (775) for everyone.
Next I need to flash the .hex
to the AVR from within the 7688 Duo, with AVRDude.
I copied it to the 7688 via scp. Make sure, to that the SPI pins are free.
$ scp bin/7688_serial_test/smart7688/7688_serial_test.hex root@he_gateway.lan:/tmp/
$ ssh root@he_gateway.lan
$ cd /tmp
$ avrdude -p m32u4 -c linuxgpio -v -e -U flash:w:7688_serial_test.hex
$ opkg update && opkg install picocom
I am not getting any output here, which is because the default serial port in the avr is called mapped to Serial1
. If you don’t want replace Serial.print()
with Serial1.print()
you can use the much more ugly but convenient SERIAL_PORT_HARDWARE
directive, see: pins_arduino.h
. (SERIAL_PORT_HARDWARE.print()
…).
Unbricking LinkIt Smart 7688 Duo
Thanks to cnx-software.com blog there is a documented way to debrick the device.
Requirements
- USB-OTG-cable
- USB-stick (FAT32 formated)
- the latest firmware image
- Unzip the image and put
lks7688.img
to the toplevel directory of the USB stick. - The Stick with the OTG cable going into the
USB host
port. The other port powers the device. - Press
wifi
-Button and keep pressed. PressMPU
-Button for 3-5 secs. - When the red LED starts blinking, reveal the
wifi
-Button. After 2-3 Minutes the update should be done.
It is easier when have UART connected:
DDR Calibration DQS reg = 00008989
U-Boot 1.1.3 (Sep 10 2015 - 05:56:31)
Board: Ralink APSoC DRAM: 128 MB
relocate_code Pointer at: 87f68000
flash manufacture id: c2, device id 20 19
find flash: MX25L25635E
*** Warning - bad CRC, using default environment
============================================
Ralink UBoot Version: 4.3.0.0
--------------------------------------------
ASIC 7628_MP (Port5<->None)
DRAM component: 1024 Mbits DDR, width 16
DRAM bus: 16 bit
Total memory: 128 MBytes
Flash component: SPI Flash
Date:Sep 10 2015 Time:05:56:31
============================================
icache: sets:512, ways:4, linesz:32 ,total:65536
dcache: sets:256, ways:4, linesz:32 ,total:32768
##### The CPU freq = 580 MHZ ####
estimate memory size =128 Mbytes
RESET MT7628 PHY!!!!!!
GPIOMODE --> 50054404
GPIOMODE2 --> 5540551
RESET BUTTON PRESSED
button pressed for 13 s
Please choose the operation:
1: Load system code to SDRAM via TFTP.
2: Load system code then write to Flash via TFTP.
3: Boot system code via Flash (default).
4: Entr boot command line interface.
7: Load Boot Loader code then write to Flash via Serial.
9: Load Boot Loader code then write to Flash via TFTP.
5: System Load Linux then write to Flash via USB Storage.
(Re)start USB...
USB0: *********ehci_hcd_init**********
Mediatek/Ralink USB EHCI host init hccr b01c0000 and hcor b01c0010 hc_length 16
6. u2phydcr0(0xb0120860)=0x00aaaa02
FM_OUT value: u4FmOut = 0(0x00000000)
FM_OUT value: u4FmOut = 131(0x00000083)
FM detection done! loop = 1
SR calibration value u1SrCalVal = 6
Register 1111 NbrPorts 1
USB EHCI 1.00
scanning bus 0 for devices... 2 USB Device(s) found
scanning bus for storage devices... 1 Storage Device(s) found
reading lks7688.img
...........................................................................................................................................................................................................................................................................................................................................................................................................
22282244 bytes read
writing lks7688.img to flash
....................................................................................................................................................................................................................................................................................................................................................
....................................................................................................................................................................................................................................................................................................................................................
.
.
Done!
[04040D07][04040C0F]