Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
serial2i2c.py.txt
- Committer:
- k4zuki
- Date:
- 2014-10-17
- Revision:
- 38:9d12c615c8ea
- Child:
- 76:fcbc456010e0
File content as of revision 38:9d12c615c8ea:
import serial
import argparse
import struct
import os.path
import binascii
# Table 3. ASCII commands supported by SC18IM700
# ASCII command Hex value Command function
# S 0x53 I2C-bus START
# P 0x50 I2C-bus STOP
# R 0x52 read SC18IM700 internal register
# W 0x57 write to SC18IM700 internal register
# I 0x49 read GPIO port
# O 0x4F write to GPIO port
# Z 0x5A power down
class serial2i2c(object):
ser=0
channel='0'
address=0x80
def __init__(self,port='com1',baud='115200'):
self.ser=serial.Serial(port,baudrate=baud,timeout=1)
def setChannel(self,channel=0):
self.channel=channel
self.ser.write("C"+str(self.channel)+"P")
return (self.ser.readline().strip())
pass
def read(self,address,length=1):
self.ser.write("S"+chr(address|0x01)+chr(length)+"P")
return(self.ser.readline().strip())
pass
def write(self,address,data=0):
data=self.convert_hex_to_ascii(data)
length=len(data)
format=">"+str(length)+"s"
self.ser.write("S"+chr(address|0x00)+chr(length)\
+struct.pack(format,data)+"P")
# +">"+str(length)+"B"+chr(data)+"P")
return(self.ser.readline().strip())
pass
def write_and_read(self,address,wdata=0,rlength=1):
wdata=self.convert_hex_to_ascii(wdata)
length=len(wdata)
format=">"+str(length)+"s"
self.ser.write("S"+chr(address|0x00)+chr(length)+struct.pack(format,wdata)\
+"S"+chr(address|0x01)+chr(rlength)\
+"P")
# +">"+str(length)+"B"+chr(wdata)+"P")
return(self.ser.readline().strip())
def start(self):
self.ser.write("S")
pass
def stop(self):
self.ser.write("P")
pass
def convert_hex_to_ascii(self,h):
chars_in_reverse = []
while h != 0x0:
chars_in_reverse.append(chr(h & 0xFF))
h = h >> 8
chars_in_reverse.reverse()
return ''.join(chars_in_reverse)
# def send(self,data="Sx4hogeP"):
# self.ser.write(data)
# pass
class MyParser(object):
def __init__(self):
self.parser = argparse.ArgumentParser(description="hogeeee")
self.parser.add_argument('--port','-p', help='number or name of serial port', default='com1')
# self.parser.add_argument('--port','-p', help='number or name of serial port', default='/dev/ttyACM0')
# self.parser.add_argument('--mon','-m', help='number or name of serial port', default='/dev/ttyACM0')
self.parser.add_argument('--baud','-b', help='baudrate of serial port', default='115200')#460800
self.args=self.parser.parse_args(namespace=self)
if __name__=="__main__":
# parser.print_help()
parser=MyParser()
# args=parser.parse_args()
# print args
# print args.port, args.baud
port=parser.args.port # port number, different in OSes
baud=parser.args.baud
dev=serial2i2c(port,baud)
## channel="C0P"
## i2cw="S"+chr(0x80)+chr(0x04)+struct.pack(">4B",0xde,0xad,0xbe,0xaf)+"P"
## i2crw="S"+chr(0x80)+chr(0x04)+struct.pack(">4B",0xde,0xad,0xbe,0xaf)+"S"+chr(0x81)+chr(0x04)+"P"
# print channel,i2cw
# raw_input("wait, press enter to set channel 0")
raw_input("wait, press enter to transferring data")
print dev.setChannel(0)
# print dev.ser.write(channel)
# print dev.ser.readline().strip()
# raw_input("wait, press enter to set channel 1")
# print dev.ser.write("C1P")
# print dev.ser.readline().strip()
# raw_input("wait, press enter to send write command")
print dev.write(0x90,0xdeadbeaf)
## ser.write(i2cw)
print "%02X"%(int(dev.write_and_read(0x90,0xdeadbeaf,50).split(',')[0],16))
# print dev.ser.readline().strip()
## raw_input("wait, press enter to send repeated start command")
## dev.ser.write(i2crw)
## print dev.ser.readline()
## raw_input("wait, press enter to send 'R' command")
## ser.write('RP')
## print dev.ser.readline()
## raw_input("wait, press enter to send 'W' command")
## ser.write('WP')
## print dev.ser.readline()
## raw_input("wait, press enter to send 'I' command")
## ser.write('IP')
## print dev.ser.readline()
## raw_input("wait, press enter to send 'O' command")
## ser.write('OP')
## print dev.ser.readline()
## raw_input("wait, press enter to send 'Z' command")
## ser.write('ZP')
## print dev.ser.readline()
## raw_input("wait, press enter to send unknown command")
## ser.write('XP')
## print dev.ser.readline()
# while(ser.inWaiting()>0):
# print ser.readline()
# dev.ser.close()