Hi,
I have some problems programming an ATtiny85 with an Jtagice-MK2 (SPI) via
avrdude 5.11 (arch repository and recent svn).

Everything works with avrstudio6 trough Virtualbox (same hardware setup, same
machine). But trying to write the same hex-file via avrdude fails at the
beginning of verification:

---8<-----------8<-----------8<-----------8<-----------

avrdude: verifying ...
avrdude: verification error, first mismatch at byte 0x0000
         0x00 != 0x0e
avrdude: verification error; content mismatch

---8<-----------8<-----------8<-----------8<-----------

Until that point everything works fine.

I attached the output of
  avrdude -c jtag2isp -P usb -p ATtiny85 -vvvv -i10 -u -U flash:w:test.hex
to this mail.

Entering terminal mode and reading the fuses works.

I added -u to the avrdude commandline because it also reported problems with the
fuses, but those are fine.

Best regards and thanks for help,
  Daniel Otte
avrdude: Version 5.11svn, compiled on Aug 13 2012 at 11:17:45
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2009 Joerg Wunsch

         System wide configuration file is "/etc/avrdude.conf"
         User configuration file is "/home/bg/.avrduderc"
         User configuration file does not exist or is not a regular file, 
skipping

         Using Port                    : usb
         Using Programmer              : jtag2isp
         Setting isp clock delay        :  10
avrdude: stk500v2_jtagmkII_open()
avrdude: usbdev_open(): Found JTAGICE mkII, serno: 070000000971
avrdude: usbdev_open(): using read endpoint 0x82
avrdude: jtagmkII_getsync()
avrdude: jtagmkII_getsync(): Sending sign-on command: 
avrdude: jtagmkII_send(): sending 1 bytes
avrdude: Sent: . [1b] . [00] . [00] . [01] . [00] . [00] . [00] . [0e] . [01] . 
[f3] . [97] 
avrdude: jtagmkII_recv():

avrdude: jtagmkII_recv(): Got message seqno 0 (command_sequence == 0)
avrdude: Recv: . [86] . [01] . [ff] . [19] . [07] . [00] . [ff] . [19] . [07] . 
[01] . [07] . [00] . [00] . [00] . [09] q [71] J [4a] T [54] A [41] G [47] I 
[49] C [43] E [45] m [6d] k [6b] I [49] I [49] . [00] 

Raw message:
0x86 0x01 0xff 0x19 0x07 0x00 0xff 0x19 0x07 0x01 0x07 0x00 0x00 0x00 0x09 0x71
0x4a 0x54 0x41 0x47 0x49 0x43 0x45 0x6d 0x6b 0x49 0x49 0x00 
Sign-on succeeded

JTAG ICE mkII sign-on message:
Communications protocol version: 1
M_MCU:
  boot-loader FW version:        255
  firmware version:              7.25
  hardware version:              0
S_MCU:
  boot-loader FW version:        255
  firmware version:              7.25
  hardware version:              1
Serial number:                   07:00:00:00:09:71
Device ID:                       JTAGICEmkII
avrdude: jtagmkII_setparm()
avrdude: jtagmkII_setparm(): Sending set parameter command (parm 0x03, 1 
bytes): 
avrdude: jtagmkII_send(): sending 3 bytes
avrdude: Sent: . [1b] . [01] . [00] . [03] . [00] . [00] . [00] . [0e] . [02] . 
[03] . [03] . [89] f [66] 
avrdude: jtagmkII_recv():

avrdude: jtagmkII_recv(): Got message seqno 1 (command_sequence == 1)
avrdude: Recv: . [80] 

Raw message:
0x80 
OK

avrdude: jtagmkII_getsync(): Sending get sync command: 
avrdude: jtagmkII_send(): sending 1 bytes
avrdude: Sent: . [1b] . [02] . [00] . [01] . [00] . [00] . [00] . [0e] . [0f] . 
[e2] u [75] 
avrdude: jtagmkII_recv():

avrdude: jtagmkII_recv(): Got message seqno 2 (command_sequence == 2)
avrdude: Recv: . [80] 

Raw message:
0x80 
OK

         AVR Part                      : ATtiny85
         Chip Erase delay              : 4500 us
         PAGEL                         : P00
         BS2                           : P00
         RESET disposition             : possible i/o
         RETRY pulse                   : SCK
         serial program mode           : yes
         parallel program mode         : yes
         Timeout                       : 200
         StabDelay                     : 100
         CmdexeDelay                   : 25
         SyncLoops                     : 32
         ByteDelay                     : 0
         PollIndex                     : 3
         PollValue                     : 0x53
         Memory Detail                 :

                                  Block Poll               Page                 
      Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  
MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- 
----- ---------
           eeprom        65     6     4    0 no        512    4      0  4000  
4500 0xff 0xff
                                  Block Poll               Page                 
      Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  
MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- 
----- ---------
           flash         65     6    32    0 yes      8192   64    128  4500  
4500 0xff 0xff
                                  Block Poll               Page                 
      Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  
MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- 
----- ---------
           signature      0     0     0    0 no          3    0      0     0    
 0 0x00 0x00
                                  Block Poll               Page                 
      Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  
MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- 
----- ---------
           lock           0     0     0    0 no          1    0      0  9000  
9000 0x00 0x00
                                  Block Poll               Page                 
      Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  
MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- 
----- ---------
           lfuse          0     0     0    0 no          1    0      0  9000  
9000 0x00 0x00
                                  Block Poll               Page                 
      Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  
MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- 
----- ---------
           hfuse          0     0     0    0 no          1    0      0  9000  
9000 0x00 0x00
                                  Block Poll               Page                 
      Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  
MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- 
----- ---------
           efuse          0     0     0    0 no          1    0      0  9000  
9000 0x00 0x00
                                  Block Poll               Page                 
      Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  
MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- 
----- ---------
           calibration    0     0     0    0 no          2    0      0     0    
 0 0x00 0x00

         Programmer Type : JTAGMKII_ISP
         Description     : Atmel JTAG ICE mkII in ISP mode
avrdude: jtagmkII_getparm()
avrdude: jtagmkII_getparm(): Sending get parameter command (parm 0x06): 
avrdude: jtagmkII_send(): sending 2 bytes
avrdude: Sent: . [1b] . [03] . [00] . [02] . [00] . [00] . [00] . [0e] . [03] . 
[06] l [6c] . [ed] 
avrdude: jtagmkII_recv():

avrdude: jtagmkII_recv(): Got message seqno 3 (command_sequence == 3)
avrdude: Recv: . [81] F [46] . [0b] 

Raw message:
0x81 0x46 0x0b 
parameter values:
0x46  0x0b  

         Vtarget         : 2.9 V

avrdude: jtagmkII_send(): sending 5 bytes
avrdude: Sent: . [1b] . [04] . [00] . [05] . [00] . [00] . [00] . [0e] / [2f] . 
[03] . [00] . [03] . [98] = [3d] . [f4] 
avrdude: jtagmkII_recv():

avrdude: jtagmkII_recv(): Got message seqno 4 (command_sequence == 4)
avrdude: Recv: . [88] . [03] . [00] . [06] 
         SCK period      : 8.00 us


avrdude: jtagmkII_send(): sending 15 bytes
avrdude: Sent: . [1b] . [05] . [00] . [0f] . [00] . [00] . [00] . [0e] / [2f] . 
[02] . [00] . [10] . [c8] d [64] . [19]   [20] . [00] S [53] . [03] . [ac] S 
[53] . [00] . [00] | [7c] % [25] 
avrdude: jtagmkII_recv():

avrdude: jtagmkII_recv(): Got message seqno 5 (command_sequence == 5)
avrdude: Recv: . [88] . [10] . [00] 
avrdude: AVR device initialized and ready to accept instructions

Reading | 
avrdude: jtagmkII_send(): sending 11 bytes
avrdude: Sent: . [1b] . [06] . [00] . [0b] . [00] . [00] . [00] . [0e] / [2f] . 
[07] . [00] . [1d] . [04] . [04] . [00] 0 [30] . [00] . [00] . [00] . [08] . 
[d0] 
avrdude: jtagmkII_recv():

avrdude: jtagmkII_recv(): Got message seqno 6 (command_sequence == 6)
avrdude: Recv: . [88] . [1d] . [00] . [00] 0 [30] . [00] . [1e] . [00] 

avrdude: jtagmkII_send(): sending 11 bytes
avrdude: Sent: . [1b] . [07] . [00] . [0b] . [00] . [00] . [00] . [0e] / [2f] . 
[07] . [00] . [1d] . [04] . [04] . [00] 0 [30] . [00] . [01] . [00] 7 [37] 1 
[31] 
avrdude: jtagmkII_recv():

avrdude: jtagmkII_recv(): Got message seqno 7 (command_sequence == 7)
avrdude: Recv: . [88] . [1d] . [00] . [00] 0 [30] . [00] . [93] . [00] 
################
avrdude: jtagmkII_send(): sending 11 bytes
avrdude: Sent: . [1b] . [08] . [00] . [0b] . [00] . [00] . [00] . [0e] / [2f] . 
[07] . [00] . [1d] . [04] . [04] . [00] 0 [30] . [00] . [02] . [00] . [87] . 
[1e] 
avrdude: jtagmkII_recv():

avrdude: jtagmkII_recv(): Got message seqno 8 (command_sequence == 8)
avrdude: Recv: . [88] . [1d] . [00] . [00] 0 [30] . [00] . [0b] . [00] 
################################## | 100% 0.15s

avrdude: Device signature = 0x1e930b
avrdude: NOTE: "flash" memory has been specified, an erase cycle will be 
performed
         To disable this feature, specify the -D option.
avrdude: erasing chip

avrdude: jtagmkII_send(): sending 10 bytes
avrdude: Sent: . [1b] . [09] . [00] . [0a] . [00] . [00] . [00] . [0e] / [2f] . 
[02] . [00] . [12] . [04] . [00] . [ac] . [80] . [00] . [00] ~ [7e] . [f4] 
avrdude: jtagmkII_recv():

avrdude: jtagmkII_recv(): Got message seqno 9 (command_sequence == 9)
avrdude: Recv: . [88] . [12] . [00] 

avrdude: jtagmkII_send(): sending 15 bytes
avrdude: Sent: . [1b] . [0a] . [00] . [0f] . [00] . [00] . [00] . [0e] / [2f] . 
[02] . [00] . [10] . [c8] d [64] . [19]   [20] . [00] S [53] . [03] . [ac] S 
[53] . [00] . [00] a [61] . [01] 
avrdude: jtagmkII_recv():

avrdude: jtagmkII_recv(): Got message seqno 10 (command_sequence == 10)
avrdude: Recv: . [88] . [10] . [00] 
avrdude: reading input file "test.hex"
avrdude: input file test.hex auto detected as Intel Hex
avrdude: writing flash (62 bytes):

Writing | 
avrdude: jtagmkII_send(): sending 8 bytes
avrdude: Sent: . [1b] . [0b] . [00] . [08] . [00] . [00] . [00] . [0e] / [2f] . 
[02] . [00] . [06] . [00] . [00] . [00] . [00] . [eb] O [4f] 
avrdude: jtagmkII_recv():

avrdude: jtagmkII_recv(): Got message seqno 11 (command_sequence == 11)
avrdude: Recv: . [88] . [06] . [00] 

avrdude: jtagmkII_send(): sending 77 bytes
avrdude: Sent: . [1b] . [0c] . [00] M [4d] . [00] . [00] . [00] . [0e] / [2f] . 
[02] . [00] . [13] . [00] @ [40] . [c1] . [06] @ [40] L [4c]   [20] . [ff] . 
[ff] . [0e] . [c0] . [15] . [c0] . [14] . [c0] . [13] . [c0] . [12] . [c0] . 
[11] . [c0] . [10] . [c0] . [0f] . [c0] . [0e] . [c0] . [0d] . [c0] . [0c] . 
[c0] . [0b] . [c0] . [0a] . [c0] . [09] . [c0] . [08] . [c0] . [11] $ [24] . 
[1f] . [be] . [cf] . [e5] . [d2] . [e0] . [de] . [bf] . [cd] . [bf] . [02] . 
[d0] . [06] . [c0] . [e8] . [cf] . [8a] . [e0] . [87] . [bb] . [88] . [e0] . 
[88] . [bb] . [ff] . [cf] . [f8] . [94] . [ff] . [cf] . [ff] . [ff] . [00] 3 
[33] 
avrdude: jtagmkII_recv():

avrdude: jtagmkII_recv(): Got message seqno 12 (command_sequence == 12)
avrdude: Recv: . [88] . [13] . [00] 
################################################## | 100% 0.12s

avrdude: 62 bytes of flash written
avrdude: verifying flash memory against test.hex:
avrdude: load data flash data from input file test.hex:
avrdude: input file test.hex auto detected as Intel Hex
avrdude: input file test.hex contains 62 bytes
avrdude: reading on-chip flash data:

Reading | 
avrdude: jtagmkII_send(): sending 8 bytes
avrdude: Sent: . [1b] . [0d] . [00] . [08] . [00] . [00] . [00] . [0e] / [2f] . 
[02] . [00] . [06] . [00] . [00] . [00] . [00] . [06] . [f7] 
avrdude: jtagmkII_recv():

avrdude: jtagmkII_recv(): Got message seqno 13 (command_sequence == 13)
avrdude: Recv: . [88] . [06] . [00] 

avrdude: jtagmkII_send(): sending 7 bytes
avrdude: Sent: . [1b] . [0e] . [00] . [07] . [00] . [00] . [00] . [0e] / [2f] C 
[43] . [00] . [14] . [00] @ [40]   [20] . [f3] . [19] 
avrdude: jtagmkII_recv():

avrdude: jtagmkII_recv(): Got message seqno 14 (command_sequence == 14)
avrdude: Recv: . [88] . [14] . [00] . [00] . [00] . [01] . [01] . [02] . [02] . 
[03] . [03] . [04] . [04] . [05] . [05] . [06] . [06] . [07] . [07] . [08] . 
[08] . [09] . [09] . [0a] . [0a] . [0b] . [0b] . [0c] . [0c] . [0d] . [0d] . 
[0e] . [0e] . [0f] . [0f] . [10] . [10] . [11] . [11] . [12] . [12] . [13] . 
[13] . [14] . [14] . [15] . [15] . [16] . [16] . [17] . [17] . [18] . [18] . 
[19] . [19] . [1a] . [1a] . [1b] . [1b] . [1c] . [1c] . [1d] . [1d] . [1e] . 
[1e] . [1f] . [1f] . [00] 
avrdude: avr_read(): skipping page 1: no interesting data
avrdude: avr_read(): skipping page 2: no interesting data
avrdude: avr_read(): skipping page 3: no interesting data
#avrdude: avr_read(): skipping page 4: no interesting data
avrdude: avr_read(): skipping page 5: no interesting data
avrdude: avr_read(): skipping page 6: no interesting data
#avrdude: avr_read(): skipping page 7: no interesting data
avrdude: avr_read(): skipping page 8: no interesting data
#avrdude: avr_read(): skipping page 9: no interesting data
avrdude: avr_read(): skipping page 10: no interesting data
avrdude: avr_read(): skipping page 11: no interesting data
#avrdude: avr_read(): skipping page 12: no interesting data
avrdude: avr_read(): skipping page 13: no interesting data
#avrdude: avr_read(): skipping page 14: no interesting data
avrdude: avr_read(): skipping page 15: no interesting data
avrdude: avr_read(): skipping page 16: no interesting data
#avrdude: avr_read(): skipping page 17: no interesting data
avrdude: avr_read(): skipping page 18: no interesting data
#avrdude: avr_read(): skipping page 19: no interesting data
avrdude: avr_read(): skipping page 20: no interesting data
avrdude: avr_read(): skipping page 21: no interesting data
#avrdude: avr_read(): skipping page 22: no interesting data
avrdude: avr_read(): skipping page 23: no interesting data
avrdude: avr_read(): skipping page 24: no interesting data
#avrdude: avr_read(): skipping page 25: no interesting data
avrdude: avr_read(): skipping page 26: no interesting data
#avrdude: avr_read(): skipping page 27: no interesting data
avrdude: avr_read(): skipping page 28: no interesting data
avrdude: avr_read(): skipping page 29: no interesting data
#avrdude: avr_read(): skipping page 30: no interesting data
avrdude: avr_read(): skipping page 31: no interesting data
#avrdude: avr_read(): skipping page 32: no interesting data
avrdude: avr_read(): skipping page 33: no interesting data
avrdude: avr_read(): skipping page 34: no interesting data
#avrdude: avr_read(): skipping page 35: no interesting data
avrdude: avr_read(): skipping page 36: no interesting data
#avrdude: avr_read(): skipping page 37: no interesting data
avrdude: avr_read(): skipping page 38: no interesting data
avrdude: avr_read(): skipping page 39: no interesting data
#avrdude: avr_read(): skipping page 40: no interesting data
avrdude: avr_read(): skipping page 41: no interesting data
#avrdude: avr_read(): skipping page 42: no interesting data
avrdude: avr_read(): skipping page 43: no interesting data
avrdude: avr_read(): skipping page 44: no interesting data
#avrdude: avr_read(): skipping page 45: no interesting data
avrdude: avr_read(): skipping page 46: no interesting data
avrdude: avr_read(): skipping page 47: no interesting data
#avrdude: avr_read(): skipping page 48: no interesting data
avrdude: avr_read(): skipping page 49: no interesting data
#avrdude: avr_read(): skipping page 50: no interesting data
avrdude: avr_read(): skipping page 51: no interesting data
avrdude: avr_read(): skipping page 52: no interesting data
#avrdude: avr_read(): skipping page 53: no interesting data
avrdude: avr_read(): skipping page 54: no interesting data
#avrdude: avr_read(): skipping page 55: no interesting data
avrdude: avr_read(): skipping page 56: no interesting data
avrdude: avr_read(): skipping page 57: no interesting data
#avrdude: avr_read(): skipping page 58: no interesting data
avrdude: avr_read(): skipping page 59: no interesting data
#avrdude: avr_read(): skipping page 60: no interesting data
avrdude: avr_read(): skipping page 61: no interesting data
avrdude: avr_read(): skipping page 62: no interesting data
#avrdude: avr_read(): skipping page 63: no interesting data
avrdude: avr_read(): skipping page 64: no interesting data
#avrdude: avr_read(): skipping page 65: no interesting data
avrdude: avr_read(): skipping page 66: no interesting data
avrdude: avr_read(): skipping page 67: no interesting data
#avrdude: avr_read(): skipping page 68: no interesting data
avrdude: avr_read(): skipping page 69: no interesting data
avrdude: avr_read(): skipping page 70: no interesting data
#avrdude: avr_read(): skipping page 71: no interesting data
avrdude: avr_read(): skipping page 72: no interesting data
#avrdude: avr_read(): skipping page 73: no interesting data
avrdude: avr_read(): skipping page 74: no interesting data
avrdude: avr_read(): skipping page 75: no interesting data
#avrdude: avr_read(): skipping page 76: no interesting data
avrdude: avr_read(): skipping page 77: no interesting data
#avrdude: avr_read(): skipping page 78: no interesting data
avrdude: avr_read(): skipping page 79: no interesting data
avrdude: avr_read(): skipping page 80: no interesting data
#avrdude: avr_read(): skipping page 81: no interesting data
avrdude: avr_read(): skipping page 82: no interesting data
#avrdude: avr_read(): skipping page 83: no interesting data
avrdude: avr_read(): skipping page 84: no interesting data
avrdude: avr_read(): skipping page 85: no interesting data
#avrdude: avr_read(): skipping page 86: no interesting data
avrdude: avr_read(): skipping page 87: no interesting data
avrdude: avr_read(): skipping page 88: no interesting data
#avrdude: avr_read(): skipping page 89: no interesting data
avrdude: avr_read(): skipping page 90: no interesting data
#avrdude: avr_read(): skipping page 91: no interesting data
avrdude: avr_read(): skipping page 92: no interesting data
avrdude: avr_read(): skipping page 93: no interesting data
#avrdude: avr_read(): skipping page 94: no interesting data
avrdude: avr_read(): skipping page 95: no interesting data
#avrdude: avr_read(): skipping page 96: no interesting data
avrdude: avr_read(): skipping page 97: no interesting data
avrdude: avr_read(): skipping page 98: no interesting data
#avrdude: avr_read(): skipping page 99: no interesting data
avrdude: avr_read(): skipping page 100: no interesting data
#avrdude: avr_read(): skipping page 101: no interesting data
avrdude: avr_read(): skipping page 102: no interesting data
avrdude: avr_read(): skipping page 103: no interesting data
#avrdude: avr_read(): skipping page 104: no interesting data
avrdude: avr_read(): skipping page 105: no interesting data
#avrdude: avr_read(): skipping page 106: no interesting data
avrdude: avr_read(): skipping page 107: no interesting data
avrdude: avr_read(): skipping page 108: no interesting data
#avrdude: avr_read(): skipping page 109: no interesting data
avrdude: avr_read(): skipping page 110: no interesting data
avrdude: avr_read(): skipping page 111: no interesting data
#avrdude: avr_read(): skipping page 112: no interesting data
avrdude: avr_read(): skipping page 113: no interesting data
#avrdude: avr_read(): skipping page 114: no interesting data
avrdude: avr_read(): skipping page 115: no interesting data
avrdude: avr_read(): skipping page 116: no interesting data
#avrdude: avr_read(): skipping page 117: no interesting data
avrdude: avr_read(): skipping page 118: no interesting data
#avrdude: avr_read(): skipping page 119: no interesting data
avrdude: avr_read(): skipping page 120: no interesting data
avrdude: avr_read(): skipping page 121: no interesting data
#avrdude: avr_read(): skipping page 122: no interesting data
avrdude: avr_read(): skipping page 123: no interesting data
#avrdude: avr_read(): skipping page 124: no interesting data
avrdude: avr_read(): skipping page 125: no interesting data
avrdude: avr_read(): skipping page 126: no interesting data
#avrdude: avr_read(): skipping page 127: no interesting data
# | 100% 0.12s

avrdude: verifying ...
avrdude: verification error, first mismatch at byte 0x0000
         0x00 != 0x0e
avrdude: verification error; content mismatch

avrdude: jtagmkII_send(): sending 6 bytes
avrdude: Sent: . [1b] . [0f] . [00] . [06] . [00] . [00] . [00] . [0e] / [2f] . 
[02] . [00] . [11] . [01] . [01] . [1b] . [d3] 
avrdude: jtagmkII_recv():

avrdude: jtagmkII_recv(): Got message seqno 15 (command_sequence == 15)
avrdude: Recv: . [88] . [11] . [00] 
avrdude: stk500v2_jtagmkII_close()
avrdude: jtagmkII_close()
avrdude: jtagmkII_close(): Sending sign-off command: 
avrdude: jtagmkII_send(): sending 1 bytes
avrdude: Sent: . [1b] . [10] . [00] . [01] . [00] . [00] . [00] . [0e] . [00] . 
[02] . [dd] 
avrdude: jtagmkII_recv():

avrdude: jtagmkII_recv(): Got message seqno 16 (command_sequence == 16)
avrdude: Recv: . [80] 

Raw message:
0x80 
OK


avrdude done.  Thank you.

Attachment: signature.asc
Description: OpenPGP digital signature

_______________________________________________
AVR-chat mailing list
[email protected]
https://lists.nongnu.org/mailman/listinfo/avr-chat

Reply via email to