はじめての F (⋈◍>◡<◍)。✧♡ ~ Pythonプログラム編② の弐~
はじめての F (⋈◍>◡<◍)。✧♡ ~ RasPi編②の弐 ~
さてっ.
RasPi編②の壱 では サンプルプログラムを実行して、FRAMメモリの読み書きができてそうか?ってのを波形をみて確認しました。
そう
波形は信号の『素顔💛』です ^^#
せっかくなので、データシートのすべてのコマンドを実行してみようと思います。
ここは、FRAM波形ワールドなページ♪
引き続き、波形を見るにはおうちにあった LabTool を使います。
■ Random Readコマンド
FRAMサンプルプログラム!
【fram_main2.py】
import os import time import sys import time import random from i2c_fram2 import * if __name__ == '__main__': print(" HELLO FRAM ") print("----------------- ") fram = SDL_I2CFRAM(addr = 0x50) print("- WRITE - ") fram.write8(7,34) print("WRITE FINISH") print("- READ - ") fram.read8(7) print("READ FINISH") print("---framEND---")
【i2c_fram2.py】
import time import smbus2 import sys from decimal import * from datetime import datetime class SDL_I2CFRAM(): ########################### # SDL_I2CFRAM Code ########################### def __init__(self, twi=1, addr=0x50): self._bus = smbus2.SMBus(twi) self._addr = addr def write8(self, address, data): w = smbus2.i2c_msg.write(self._addr, [address>>8, address%256, data]) self._bus.i2c_rdwr(w) def read8(self, address): w = smbus2.i2c_msg.write(self._addr, [address>>8, address%256]) # r1 r = smbus2.i2c_msg.read(self._addr, 1) # r2 self._bus.i2c_rdwr(w,r) # r3 print(list(r)[0])
では、プログラムを実行しておきましょう!
(env) pi@Donkey-Miho:~/miho/blog $ python fram_main2.py
HELLO FRAM
-----------------
- WRITE -
WRITE FINISH
- READ -
34
READ FINISH
---framEND---
波形はこれ ↓↓
つぎ!
■ Page Writeコマンド
FRAMサンプルプログラム!
【fram_main3.py】
import os import time import sys import time import random from i2c_fram3 import * if __name__ == '__main__': fram = SDL_I2CFRAM(addr = 0x50) print(" HELLO FRAM ") print("----------------- ") print("- WRITE - ") address =0x00 data = [1, 2, 3, 4, 5, 6, 7, 8] fram.write_block(address, data) print("WRITE FINISH") # With LabTool print("- MemDump - ") fram.mem_dump() print("---framEND---")
【i2c_fram3.py】
import time import smbus2 import sys from decimal import * from datetime import datetime class SDL_I2CFRAM(): ########################### # SDL_I2CFRAM Code ########################### def __init__(self, twi=1, addr=0x50): self._bus = smbus2.SMBus(twi) self._addr = addr def write_block(self, address, data): cnt_len = len(data) for y in range(0, cnt_len): print("data[%d] = %d" %(y, data[y])) print("---") new_data = [address%256] + data cnt_len = len(new_data) for y in range(0, cnt_len): print("new_data[%d] = %d" %(y, new_data[y])) self._bus.write_i2c_block_data(self._addr,address>>8, new_data) # r1 def mem_dump(self): w = smbus2.i2c_msg.write(self._addr, [0x00>>8, 0x00%256]) self._bus.i2c_rdwr(w) for x in range(0,10): r = smbus2.i2c_msg.read(self._addr, 1) self._bus.i2c_rdwr(r) print("data = 0x%x " % (list(r)[0]))
では、プログラムを実行しておきましょう!
(env) pi@Donkey-Miho:~/miho/blog $ python fram_main3.py HELLO FRAM ----------------- - WRITE - WRITE FINISH - MemDump - data = 0x1 data = 0x2 data = 0x3 data = 0x4 data = 0x5 data = 0x6 data = 0x7 data = 0x8 data = 0x6c data = 0x6d ---framEND---
※ 出力結果 0x6c や 0x6d の部分は、FRAMに書かれているデータが違えば変わってきます
波形はこれ ↓↓
つぎ!
■ Sequential Readコマンド
FRAMサンプルプログラム!
【fram_main4.py】
import os import time import sys import time import random from i2c_fram4 import * if __name__ == '__main__': fram = SDL_I2CFRAM(addr = 0x50) print(" HELLO FRAM ") print("----------------- ") print("- WRITE - ") address =0x00 data = [1, 2, 3, 4, 5, 6, 7, 8] fram.write_block(address, data) print("WRITE FINISH") print("- READ - ") fram.read_block(0x00, 3) print("READ FINISH") # With LabTool print("- MemDump - ") fram.mem_dump() print("---framEND---")
【i2c_fram4.py】
import time import smbus2 import sys from decimal import * from datetime import datetime class SDL_I2CFRAM(): ########################### # SDL_I2CFRAM Code ########################### def __init__(self, twi=1, addr=0x50): self._bus = smbus2.SMBus(twi) self._addr = addr def write_block(self, address, data): cnt_len = len(data) for y in range(0, cnt_len): print("data[%d] = %d" %(y, data[y])) print("---") new_data = [address%256] + data cnt_len = len(new_data) for y in range(0, cnt_len): print("new_data[%d] = %d" %(y, new_data[y])) self._bus.write_i2c_block_data(self._addr,address>>8, new_data) def read_block(self, address, sequence): w = smbus2.i2c_msg.write(self._addr, [address>>8, address%256]) # r1 r = smbus2.i2c_msg.read(self._addr, sequence) # r2 self._bus.i2c_rdwr(w,r) # r3 for x in range(0, sequence): print("data = 0x%x" % (list(r)[x])) def mem_dump(self): w = smbus2.i2c_msg.write(self._addr, [0x00>>8, 0x00%256]) self._bus.i2c_rdwr(w) for x in range(0,10): r = smbus2.i2c_msg.read(self._addr, 1) self._bus.i2c_rdwr(r) print("data = 0x%x " % (list(r)[0]))
では、プログラムを実行しておきましょう!
(env) pi@Donkey-Miho:~/miho/blog $ python fram_main4.py HELLO FRAM ----------------- - WRITE - WRITE FINISH - READ - data = 0x1 data = 0x2 data = 0x3 READ FINISH - MemDump - data = 0x1 data = 0x2 data = 0x3 data = 0x4 data = 0x5 data = 0x6 data = 0x7 data = 0x8 data = 0x6c data = 0x6d ---framEND---
※ 出力結果 0x6c や 0x6d の部分は、FRAMに書かれているデータが違えば変わってきます
波形はこれ ↓↓
さいご!
■ Device IDコマンド
FRAMサンプルプログラム!
【fram_main5.py】
import os import time import sys import time from i2c_fram5 import * if __name__ == '__main__': print(" HELLO FRAM ") print("----------------- ") fram = SDL_I2CFRAM(addr = 0x50) print("- DeviceID - ") fram.read_device_id() print("DeviceID FINISH") print("---framEND---")
【I2C_fram5.py】
import time import smbus2 import sys from decimal import * from datetime import datetime class SDL_I2CFRAM(): ########################### # SDL_I2CFRAM Code ########################### def __init__(self, twi=1, addr=0x50): self._bus = smbus2.SMBus(twi) self._addr = addr def read_device_id(self): w = smbus2.i2c_msg.write(0xf8//2, [0xa0]) # D1 r = smbus2.i2c_msg.read(0xf9//2, 3) # D2 self._bus.i2c_rdwr(w, r) # D3 print(list(r)[0],list(r)[1],list(r)[2])
では、プログラムを実行しておきましょう!
(env) pi@Donkey-Miho:~/miho/blog $ python fram_main_DeviceID.py HELLO FRAM ----------------- - DeviceID - 0 165 16 DeviceID FINISH ---framEND---
波形はこれ ↓↓
smbus2 を使った FRAM MB85RC256V の データシートのコマンドを全部実行できました!
API の仕様がうまく分ってなくても ^^; 波形を見るとこうなってるから、こう設定しよう!とか、いったい何がどうなって、どうなってるのかわかります ^^#
お手軽ロジアナで十分波形を見れました!
次は、SPI の FRAM の 波形を見てみたいなと思います ^^#