Programming the Arduino on DV2


#1

Hiya,

A couple of brief notes about how to get started with the Arduino on the mangOH DV2 board.

I KNOW THE DV2 BOARD IS DEPRECATED … BUT THERE’S MORE THAN A FEW OUT THERE SO I EXPECT THIS MAY BE USEFUL

My setup:
Windows 7 x64
Arduino IDE 1.6.9 (check ‘install the USB drivers’ when installing)
3rd party shield
Sketch developed using an Arduino Uno board
DV2 board running firmware 16.01

The problem
When I connected to the Arduino (via CN330), Windows New Hardware wizard failed to find drivers for the Arduino, there was no com port in the Windows Device Manager (just an ‘Other Device’ with an error), and the Arduino IDE could not connect to the mangOH board.

I did notice that there was an ‘Arduino Leonardo Bootloader’ device appear in the Device Manager->Ports section for a brief moment (about 10 seconds or so) after the Arduino had been rebooted … so I knew that the connection between the PC and mangOH board was OK.

The Solution
The Arduino as implemented on the DV2 board is a ‘Leonardo’ - which does all communications with the host via USB. On initial boot the Leonardo enumerates on the USB as a bootloader device, then after about 10 seconds or so it then re-enumerates as either a CDC (serial port) device, or a HID (mouse/keyboard) device. It was this second enumeration that was failing on my Win7 PC.

After a lot of scratching around, I found that the USB VID/PID value returned from the mangOH Leonardo when in CDC mode DID NOT MATCH the USB VID/PID string in the official Arduino provided arduino.inf file (found in C:\Program Files(x86)\Arduino\drivers). This was the reason that Windows could not enumerate the device.

To solve this, I edited the arduino.inf file and added another device called the ‘mangOH DV2 Arduino Leonardo’. Once I had finished updating the appropriate places in the file I then Updated the drivers for the unknown device and all became well! Note that the new device was an unsigned device, so the usual warning messages about installing unsigned drivers appeared.

When I can upload the file I’ll tag a copy here (the forum only accepts image files at the moment … sigh :frowning: )

Until then, here’s the source (can’t load it as code at the moment either…). Look for the lines ‘mangoh.sketch.name’ for my changes.

/** SNIP **/
;
; Copyright 2015 Arduino LLC (http://www.arduino.cc/)
;
; Developed by Zach Eveland, Blacklabel Development, Inc.
;
; Arduino is free software; you can redistribute it and/or modify
; it under the terms of the GNU General Public License as published by
; the Free Software Foundation; either version 2 of the License, or
; (at your option) any later version.
;
; This program is distributed in the hope that it will be useful,
; but WITHOUT ANY WARRANTY; without even the implied warranty of
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
; GNU General Public License for more details.
;
; You should have received a copy of the GNU General Public License
; along with this program; if not, write to the Free Software
; Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
;
; As a special exception, you may use this file as part of a free software
; library without restriction. Specifically, if other files instantiate
; templates or use macros or inline functions from this file, or you compile
; this file and link it with other files to produce an executable, this
; file does not by itself cause the resulting executable to be covered by
; the GNU General Public License. This exception does not however
; invalidate any other reasons why the executable file might be covered by
; the GNU General Public License.
;

[Strings]
DriverPackageDisplayName="Arduino USB Driver"
ManufacturerName="Arduino LLC (www.arduino.cc)"
ServiceName="USB RS-232 Emulation Driver"
bossa.name="Bossa Program Port"
due.programming_port.name="Arduino Due Programming Port"
due.sketch.name="Arduino Due"
esplora.bootloader.name="Arduino Esplora bootloader"
esplora.sketch.name="Arduino Esplora"
leonardo.bootloader.name="Arduino Leonardo bootloader"
leonardo.sketch.name="Arduino Leonardo"
mangoh.sketch.name="mangOH DV2 Arduino Leonardo"
lilypadUSB.bootloader.name="Arduino LilyPad USB bootloader"
lilypadUSB.sketch.name="Arduino LilyPad USB"
mega2560.name="Arduino Mega 2560"
mega2560rev3.name="Arduino Mega 2560"
megaADK.name="Arduino Mega ADK"
megaADKrev3.name="Arduino Mega ADK"
micro.bootloader.name="Arduino Micro bootloader"
micro.sketch.name="Arduino Micro"
mkr1000.sketch.name="Arduino MKR1000"
mkr1000.bootloader.name="Arduino MKR1000 bootloader"
robotControl.bootloader.name="Arduino Robot Control bootloader"
robotControl.sketch.name="Arduino Robot"
robotMotor.bootloader.name="Arduino Robot Motor bootloader"
robotMotor.sketch.name="Arduino Robot"
uno.name="Arduino Uno"
unoR3.name="Arduino Uno"
usbserial.name="Arduino USB Serial Light Adapter"
yun.bootloader.name="Arduino Yun bootloader"
yun.sketch.name="Arduino Yun"
zero.edbg.name="Atmel Corp. EDBG CMSIS-DAP"
zero.sketch.name="Arduino Zero"
zero.bootloader.name="Arduino Zero bootloader"
sme_fox.sketch.name="SmartEverything Fox"
sme_fox.bootloader.name=“SmartEverything Fox bootloader”

[DefaultInstall]
CopyINF=arduino.inf

[Version]
Class=Ports
ClassGuid={4D36E978-E325-11CE-BFC1-08002BE10318}
Signature="$Windows NT$"
Provider=%ManufacturerName%
DriverPackageDisplayName=%DriverPackageDisplayName%
CatalogFile=arduino.cat
DriverVer=11/24/2015,1.2.3.0

[Manufacturer]
%ManufacturerName%=DeviceList, NTamd64, NTia64

[DestinationDirs]
FakeModemCopyFileSection=12
DefaultDestDir=12

[DeviceList]
%bossa.name%=DriverInstall, USB\VID_03EB&PID_6124
%due.programming_port.name%=DriverInstall, USB\VID_2341&PID_003D
%due.sketch.name%=DriverInstall, USB\VID_2341&PID_003E&MI_00
%esplora.bootloader.name%=DriverInstall, USB\VID_2341&PID_003C
%esplora.sketch.name%=DriverInstall, USB\VID_2341&PID_803C&MI_00
%leonardo.bootloader.name%=DriverInstall, USB\VID_2341&PID_0036
%leonardo.sketch.name%=DriverInstall, USB\VID_2341&PID_8036&MI_00
%mangoh.sketch.name%=DriverInstall, USB\VID_2341&PID_8036&REV_0100
%lilypadUSB.bootloader.name%=DriverInstall, USB\VID_1B4F&PID_9207
%lilypadUSB.sketch.name%=DriverInstall, USB\VID_1B4F&PID_9208&MI_00
%mega2560rev3.name%=DriverInstall, USB\VID_2341&PID_0042
%mega2560.name%=DriverInstall, USB\VID_2341&PID_0010
%megaADK.name%=DriverInstall, USB\VID_2341&PID_003F
%megaADKrev3.name%=DriverInstall, USB\VID_2341&PID_0044
%micro.bootloader.name%=DriverInstall, USB\VID_2341&PID_0037
%micro.sketch.name%=DriverInstall, USB\VID_2341&PID_8037&MI_00
%mkr1000.sketch.name%=DriverInstall, USB\VID_2341&PID_804E&MI_00
%mkr1000.bootloader.name%=DriverInstall, USB\VID_2341&PID_004E
%robotControl.bootloader.name%=DriverInstall, USB\VID_2341&PID_0038
%robotControl.sketch.name%=DriverInstall, USB\VID_2341&PID_8038&MI_00
%robotMotor.bootloader.name%=DriverInstall, USB\VID_2341&PID_0039
%robotMotor.sketch.name%=DriverInstall, USB\VID_2341&PID_8039&MI_00
%uno.name%=DriverInstall, USB\VID_2341&PID_0001
%unoR3.name%=DriverInstall, USB\VID_2341&PID_0043
%usbserial.name%=DriverInstall, USB\VID_2341&PID_003B
%yun.bootloader.name%=DriverInstall, USB\VID_2341&PID_0041
%yun.sketch.name%=DriverInstall, USB\VID_2341&PID_8041&MI_00
%zero.edbg.name%=DriverInstall, USB\VID_03EB&PID_2157&MI_01
%zero.sketch.name%=DriverInstall, USB\VID_2341&PID_804D&MI_00
%zero.bootloader.name%=DriverInstall, USB\VID_2341&PID_004D
%sme_fox.sketch.name%=DriverInstall, USB\VID_2341&PID_E002&MI_00
%sme_fox.bootloader.name%=DriverInstall, USB\VID_2341&PID_E001

[DeviceList.NTamd64]
%bossa.name%=DriverInstall, USB\VID_03EB&PID_6124
%due.programming_port.name%=DriverInstall, USB\VID_2341&PID_003D
%due.sketch.name%=DriverInstall, USB\VID_2341&PID_003E&MI_00
%esplora.bootloader.name%=DriverInstall, USB\VID_2341&PID_003C
%esplora.sketch.name%=DriverInstall, USB\VID_2341&PID_803C&MI_00
%leonardo.bootloader.name%=DriverInstall, USB\VID_2341&PID_0036
%leonardo.sketch.name%=DriverInstall, USB\VID_2341&PID_8036&MI_00
%mangoh.sketch.name%=DriverInstall, USB\VID_2341&PID_8036&REV_0100
%lilypadUSB.bootloader.name%=DriverInstall, USB\VID_1B4F&PID_9207
%lilypadUSB.sketch.name%=DriverInstall, USB\VID_1B4F&PID_9208&MI_00
%mega2560rev3.name%=DriverInstall, USB\VID_2341&PID_0042
%mega2560.name%=DriverInstall, USB\VID_2341&PID_0010
%megaADK.name%=DriverInstall, USB\VID_2341&PID_003F
%megaADKrev3.name%=DriverInstall, USB\VID_2341&PID_0044
%micro.bootloader.name%=DriverInstall, USB\VID_2341&PID_0037
%micro.sketch.name%=DriverInstall, USB\VID_2341&PID_8037&MI_00
%mkr1000.sketch.name%=DriverInstall, USB\VID_2341&PID_804E&MI_00
%mkr1000.bootloader.name%=DriverInstall, USB\VID_2341&PID_004E
%uno.name%=DriverInstall, USB\VID_2341&PID_0001
%unoR3.name%=DriverInstall, USB\VID_2341&PID_0043
%usbserial.name%=DriverInstall, USB\VID_2341&PID_003B
%robotControl.bootloader.name%=DriverInstall, USB\VID_2341&PID_0038
%robotControl.sketch.name%=DriverInstall, USB\VID_2341&PID_8038&MI_00
%robotMotor.bootloader.name%=DriverInstall, USB\VID_2341&PID_0039
%robotMotor.sketch.name%=DriverInstall, USB\VID_2341&PID_8039&MI_00
%yun.bootloader.name%=DriverInstall, USB\VID_2341&PID_0041
%yun.sketch.name%=DriverInstall, USB\VID_2341&PID_8041&MI_00
%zero.edbg.name%=DriverInstall, USB\VID_03EB&PID_2157&MI_01
%zero.sketch.name%=DriverInstall, USB\VID_2341&PID_804D&MI_00
%zero.bootloader.name%=DriverInstall, USB\VID_2341&PID_004D
%sme_fox.sketch.name%=DriverInstall, USB\VID_2341&PID_E002&MI_00
%sme_fox.bootloader.name%=DriverInstall, USB\VID_2341&PID_E001

[DeviceList.NTia64]
%bossa.name%=DriverInstall, USB\VID_03EB&PID_6124
%due.programming_port.name%=DriverInstall, USB\VID_2341&PID_003D
%due.sketch.name%=DriverInstall, USB\VID_2341&PID_003E&MI_00
%esplora.bootloader.name%=DriverInstall, USB\VID_2341&PID_003C
%esplora.sketch.name%=DriverInstall, USB\VID_2341&PID_803C&MI_00
%leonardo.bootloader.name%=DriverInstall, USB\VID_2341&PID_0036
%leonardo.sketch.name%=DriverInstall, USB\VID_2341&PID_8036&MI_00
%mangoh.sketch.name%=DriverInstall, USB\VID_2341&PID_8036&REV_0100
%lilypadUSB.bootloader.name%=DriverInstall, USB\VID_1B4F&PID_9207
%lilypadUSB.sketch.name%=DriverInstall, USB\VID_1B4F&PID_9208&MI_00
%mega2560rev3.name%=DriverInstall, USB\VID_2341&PID_0042
%mega2560.name%=DriverInstall, USB\VID_2341&PID_0010
%megaADK.name%=DriverInstall, USB\VID_2341&PID_003F
%megaADKrev3.name%=DriverInstall, USB\VID_2341&PID_0044
%micro.bootloader.name%=DriverInstall, USB\VID_2341&PID_0037
%micro.sketch.name%=DriverInstall, USB\VID_2341&PID_8037&MI_00
%mkr1000.sketch.name%=DriverInstall, USB\VID_2341&PID_804E&MI_00
%mkr1000.bootloader.name%=DriverInstall, USB\VID_2341&PID_004E
%uno.name%=DriverInstall, USB\VID_2341&PID_0001
%unoR3.name%=DriverInstall, USB\VID_2341&PID_0043
%usbserial.name%=DriverInstall, USB\VID_2341&PID_003B
%robotControl.bootloader.name%=DriverInstall, USB\VID_2341&PID_0038
%robotControl.sketch.name%=DriverInstall, USB\VID_2341&PID_8038&MI_00
%robotMotor.bootloader.name%=DriverInstall, USB\VID_2341&PID_0039
%robotMotor.sketch.name%=DriverInstall, USB\VID_2341&PID_8039&MI_00
%yun.bootloader.name%=DriverInstall, USB\VID_2341&PID_0041
%yun.sketch.name%=DriverInstall, USB\VID_2341&PID_8041&MI_00
%zero.edbg.name%=DriverInstall, USB\VID_03EB&PID_2157&MI_01
%zero.sketch.name%=DriverInstall, USB\VID_2341&PID_804D&MI_00
%zero.bootloader.name%=DriverInstall, USB\VID_2341&PID_004D
%sme_fox.sketch.name%=DriverInstall, USB\VID_2341&PID_E002&MI_00
%sme_fox.bootloader.name%=DriverInstall, USB\VID_2341&PID_E001

[DriverInstall]
include=mdmcpq.inf,usb.inf
CopyFiles = FakeModemCopyFileSection
AddReg=DriverAddReg

[DriverAddReg]
HKR,DevLoader,*ntkern
HKR,NTMPDriver,usbser.sys
HKR,EnumPropPages32,“MsPorts.dll,SerialPortPropPageProvider”

[DriverInstall.Services]
include=mdmcpq.inf
AddService=usbser, 0x00000002, DriverService

[DriverService]
DisplayName=%ServiceName%
ServiceType=1
StartType=3
ErrorControl=1
ServiceBinary=%12%\usbser.sys
LoadOrderGroup=Base

/** SNIP **/

Hope this helps someone else.

ciao, Dave


#2