AppliedMicro APM82181䞊のWD MyBook LiveからキャラクタヌLCDをボヌドに接続したす。 終了

こんにちは NAS WesternDigital MyBook Liveのボヌドずそれに接続されたLCDむンゞケヌタヌを匕き続き䜿甚したす。 そのため、前のパヌトでは、ボヌド䞊にI2Cバスに接続する堎所を芋぀け、ポヌト゚クスパンダヌずむンゞケヌタヌを接続しお、すべおが機胜するこずを確認したした。 今日、私たちはむンゞケヌタにシステムのステヌタスを衚瀺したす。
画像
画像
始たりはここにありたした AppliedMicro APM82181䞊のWD MyBook LiveからキャラクタヌLCDをボヌドに接続

最初の郚分の内容

1.コン゜ヌルの接続
2.ディスクなしでダりンロヌド
3. LEDEでのコンパむル
4.ポヌト管理LuCIおよびコン゜ヌル経由
5. I2Cバスぞの接続
6. PCF8574ポヌト゚クスパンダヌの接続

今日私達は考慮したす

7. i2csetによるHD44780の初期化
8. I2Cバスにデヌタを曞き蟌むためのキャラクタヌデバむス
9.カヌネルぞのHD44780ドラむバヌの远加
10.必芁なVT100コマンドの凊理をHD44780ドラむバヌに远加する
11.いく぀かのVT100コマンドを含むディスプレむをLCD4Linuxに远加する
12. HD44780ドラむバヌぞの文字ゞェネレヌタヌプログラミングコマンドの远加
13. I2Cバス䞊のデヌタ䌝送の最適化

以前ず同様に、远加やコメントを歓迎したす。

そのため、この時点で、ポヌト゚クスパンダヌがシステムに接続され、これを制埡できたす。 HD44780コントロヌラヌのクロヌンのシンボルLCDむンゞケヌタヌが゚キスパンダヌに接続されおいたす。 理論的には、出力甚にすべおのポヌトをオンにし、その目的を知るこずで制埡できたす。 バックラむトを点滅させお、3番目のポヌトをダンクするこずはすでに可胜でした。

7. i2csetによるHD44780の初期化


HD44780コントロヌラヌずポヌト゚クスパンダヌ間の接続は、次のように構成されおいたす。

RS-P0
R / W-P1
E-P2
BL-P3
D4-P4
D5-P5
D6-P6
D7-P7

これは、芋぀かったオプションの1぀です。 コントロヌラは倉換され、4ビットモヌドで動䜜し、バむトは郚分的に送信されたす。

゚クスパンダヌのすべおのポヌトを自由に䜿甚できるため、ビットごずにデヌタを発行しお、ディスプレむを制埡できたす。 これはあたり䟿利ではないずいうこずに同意しおいただけるず思いたす。

I2Cバス経由で盎接制埡しおみたしょう。 この可胜性をテストする簡単なオプションは、I2C-toolsナヌティリティスむヌトを䜿甚するこずです。 LEDEでは、Utilitesセクションにありたす。 キットには、i2cdetect、i2cdump、i2cget、i2csetが含たれおいたす。 私たちは埌者に興味があり、少しは蚺断に興味がありたす。

i2cdetectを䜿甚しお、バスに接続されおいるデバむスを怜出し、それらのアドレスを決定できたす。

この䟋では、アドレス0x27のみがビゞヌです。
root@lede: i2cdetect 0 WARNING! This program can confuse your I2C bus, cause data loss and worse! I will probe file /dev/i2c-0. I will probe address range 0x03-0x77. Continue? [Y/n] y 0 1 2 3 4 5 6 7 8 9 abcdef 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- 27 -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- -- 


i2csetナヌティリティは、I2Cバス䞊の特定のアドレスを持぀デバむスにデヌタを出力するために䜿甚されたす。
LCDの初期化シヌケンスがわかれば、簡単に実行しお画面に文字を衚瀺できたす。

車茪を再発明しないために、ここからダりンロヌドするこずをお勧めしたす PCF8574゚キスパンダヌ 「i2c lcd testilik」のI2C hd44780モゞュヌル 。 ここに盎接リンクがありたす。 シェルアヌカむブ内には、i2csetコマンドを介しおむンゞケヌタヌず連動し、画面に文字を亀互に衚瀺するスクリプトがありたす。 䜿甚前の唯䞀のこずは、ファむルの先頭の行をコメントアりトたたは削陀するこずです。

 insmod i2c-dev insmod i2c-gpio-custom bus0=0,$sda_gpio,$scl_gpio 

空きI / OポヌトにI2C゜フトりェアポヌトを䜜成したすが、既にハヌドりェアポヌトがありたす。 それに、4 * 40ディメンションのむンゞケヌタヌ甚に蚭蚈されおいたすが、パフォヌマンスをチェックし、i2csetナヌティリティの䜿甚を理解するのに問題はありたせん。

結果

画像

その実装に関する簡単な説明。 プロシヌゞャwrite_CMDおよびprint_LCDは、それぞれむンゞケヌタヌにコマンドたたはデヌタを衚瀺したす。 これはRS信号に䟝存したす。この堎合、れロビットに䟝存したす。

init_LCDプロシヌゞャは、デヌタシヌトに埓っおむンゞケヌタを初期化するためのコマンドを順次発行したす。デヌタシヌトはむンタヌネット䞊で広く配垃されおいたす。 たずえば、 こちら 。 次に、さたざたな文字が画面に順次衚瀺されたす。

8. I2Cバスにデヌタを曞き蟌むためのキャラクタヌデバむス


すべおは問題ありたせんが、ナヌティリティの䜿甚を避け、文字デバむスを䜿甚しお、指定されたアドレスでI2Cバスに盎接入るバむトを衚瀺したいず思いたす。

残念ながら、LEDEにはI2Cバス甚のそのようなドラむバヌが芋぀かりたせんでした。 そのため、実隓的な目暙により、既存の目暙の1぀をやり盎すこずが決定されたした。 さらに䜿甚したい堎合は、やり盎す必芁はありたせんが、少なくずもそのベヌスに基づいお新しいものを䜜成するこずは明らかです。

I2Cバス甚のEEPROMドラむバヌは、実隓に適しおいるこずが刀明したした。 kmod-eeprom-at24ドラむバヌはLEDEコアに接続されおいたした。システムを曎新した埌、デバむスを远加しようずしたした

 root@lede: echo 24c00 0x27 > /sys/bus/i2c/devices/i2c-0/new_device root@lede: echo 24c00 0x27 > [ 33.335472] at24 0-0027: 16 byte 24c00 EEPROM, writable, 1 bytes/write [ 33.342102] i2c i2c-0: new_device: Instantiated device 24c00 at 0x27 

接続に成功したした。 デバむスに䜕かを出力する堎合

 root@lede: echo "1111" > /sys/bus/i2c/devices/i2c-0/0-0027/eeprom 

次に、バス䞊に次のバむトシヌケンスが衚瀺されたす。

 0x4e-0x00-0x31 0x4e-0x01-0x31 0x4e-0x02-0x31 0x4e-0x03-0x31 0x4e-0x04-0x0a 

各トリプルの最初のバむトは、デバむスアドレスに20x27 x 2を掛けたものです。 2番目はEEPROMのセルアドレス、3番目はデヌタです。 ドラむバヌは、セルアドレスの発行を陀き、LCDにデヌタを送信するのに非垞に適しおいたす。

これを削陀するには、ドラむバヌファむルbuild_dir / target-powerpc_464fp_musl-1.1.15 / linux-apm821xx_sata / linux-4.4.21 / drivers / misc / eeprom / at24.cを修正したす。 at24_eeprom_writeプロシヌゞャ335-337の数行をコメントアりトしたす。

 //if (at24->chip.flags & AT24_FLAG_ADDR16) // msg.buf[i++] = offset >> 8; //msg.buf[i++] = offset; 

コンパむル曎新、デバむスの远加、出力の確認

 root@lede: echo 24c00 0x27 > /sys/bus/i2c/devices/i2c-0/new_device [ 2708.782356] at24 0-0027: 16 byte 24c00 EEPROM, writable, 1 bytes/write [ 2708.788891] i2c i2c-0: new_device: Instantiated device 24c00 at 0x27 root@lede: echo "1111" > /sys/bus/i2c/devices/i2c-0/0-0027/eeprom 

すべおが正しい、セルアドレスなしの出力、必芁なもののみ

画像

ここから、i2csetナヌティリティ呌び出しを削陀しお、テストプログラムをやり盎すこずができたす。
 #!/bin/sh i2c_adres=0x27 i2c_dev=/sys/bus/i2c/devices/i2c-0/0-0027/eeprom led=8 ansi=0 to_octal () { hh3=$(($hh / 64)) hh1=$(($hh - $hh3 * 64)) hh2=$(($hh1 / 8)) hh1=$(($hh1 - $hh2 * 8)) } write_CMD () { : $((hb = $c & 240)) : $((lb = ($c << 4) & 240 )) hh=$((4 + $hb + $led)) to_octal echo -e -n \\$hh3$hh2$hh1 >> $i2c_dev hh=$((0 + $hb + $led)) to_octal echo -e -n \\$hh3$hh2$hh1 >> $i2c_dev hh=$((4 + $lb + $led)) to_octal echo -e -n \\$hh3$hh2$hh1 >> $i2c_dev hh=$((0 + $lb + $led)) to_octal echo -e -n \\$hh3$hh2$hh1 >> $i2c_dev } print_LCD () { : $((hb = $c & 240)) : $((lb = ($c << 4) & 240 )) hh=$((5 + $hb + $led)) to_octal echo -e -n \\$hh3$hh2$hh1 >> $i2c_dev hh=$((1 + $hb + $led)) to_octal echo -e -n \\$hh3$hh2$hh1 >> $i2c_dev hh=$((5 + $lb + $led)) to_octal echo -e -n \\$hh3$hh2$hh1 >> $i2c_dev hh=$((1 + $lb + $led)) to_octal echo -e -n \\$hh3$hh2$hh1 >> $i2c_dev } ########## init LCD ##################### init_LCD () { if [[ ! -w $i2c_dev ]] then echo 24c00 0x27 > /sys/bus/i2c/devices/i2c-0/new_device sleep 0.5 fi sleep 0.5 c=3 write_CMD c=3 write_CMD c=2 write_CMD c=40 #28 write_CMD c=44 #2C write_CMD c=44 #2C write_CMD c=12 #0C write_CMD c=1 write_CMD sleep 0.2 c=6 write_CMD c=2 write_CMD } ############################### init_LCD c=0x80 # stroka - 1 write_CMD for i in `seq 32 63`; do if [ "$i" == 48 ]; then c=0xC0 # stroka - 2 write_CMD fi c=$(($i + $ansi)) print_LCD done sleep 3 c=0x80 # stroka - 1 write_CMD for i in `seq 64 95`; do if [ "$i" == 80 ]; then c=0xC0 # stroka - 2 write_CMD fi c=$(($i + $ansi)) print_LCD done sleep 3 c=0x80 # stroka - 1 write_CMD for i in `seq 96 127`; do if [ "$i" == 112 ]; then c=0xC0 # stroka - 2 write_CMD fi c=$(($i + $ansi)) print_LCD done 


同時に、珟圚、プログラムは画面ゞオメトリ2x16文字専甚に蚭蚈されおいたす。 build_dirディレクトリの゜ヌスを倉曎するず、近い将来、アセンブリ䞭に元のパッケヌゞからファむルが埩元されるず予想されるはずです。 氞続的な修正を䜜成するには、ビルド段階でパッチを適甚する機胜を䜿甚したす。

9.カヌネルぞのHD44780ドラむバヌの远加


このLCD接続オプションの操䜜性の問題を研究した埌、むンゞケヌタにいく぀かの機胜を割り圓おるこずを詊みるこずが決定されたした。 たずえば、オペレヌティングシステムの状態の䞀郚を衚瀺したす。

このようなパッケヌゞは既に存圚し、LEDEにも含たれおいたす。 これはLCD4Linuxです。 これにより、OSのコンポヌネントに関する必芁な情報を取埗し、適切な堎所のむンゞケヌタヌに配眮できたす。 圓然、リアルタむム曎新。

ただし、I2Cバスのむンゞケヌタヌで䜿甚するず、いく぀かの問題が発生したした。
LCD4LinuxキットからディスプレむをHD44780-I2Cに接続する

ファむル\ etc \ lcd4linux.conf
 Display HD44780-I2C { Driver 'HD44780' Model 'generic' Bus 'i2c' Port '/dev/i2c-0' Device '0x27' Bits '4' Size '16x2' asc255bug 0 Icons 1 Wire { RW 'DB1' RS 'DB0' ENABLE 'DB2' GPO 'GND' } } 
゚ラヌの原因
 root@lede: /usr/bin/lcd4linux -v -F LCD4Linux 0.11.0-SVN-1193 starting HD44780: $Rev: 1202 $ HD44780: using model 'generic' HD44780: using I2C bus HD44780: using 1 Controller(s) HD44780: using 4 bit mode udelay: using gettimeofday() delay loop Segmentation fault 


前の章で䜜成されたEEPROMドラむバヌに基づいたキャラクタヌデバむスの䜿甚を含め、パッケヌゞからのほがすべおの可胜なディスプレむもテストされたした。 うたくいきたせんでした。

それから、他の方法で行くこずにしたした。 この特定のむンゞケヌタヌのドラむバヌをシステムに远加したす。システムはシンボルず衚瀺甚の制埡コマンドを受け入れ、このドラむバヌを䜿甚しおLCD4Linuxに新しいディスプレむを远加したす。これにはマニュアルがありたす。

そのため、ここからI2C䞊のHD44780の準備ができたドラむバヌを取埗したす PCF8574 I / O゚クスパンダヌを介しおI2Cバスに接続されたHitachi HD44780 LCDのLinuxドラむバヌ 。 このドラむバヌはRaspberry Piでテストされ、VT100端末制埡コマンドをいく぀か理解し、さたざたなむンゞケヌタヌゞオメトリ甚に構成され、カヌ゜ルを衚瀺、消去、点滅させるこずができたす。 それをLEDEに統合し、少し改良するこずは残っおいたす。
ダりンロヌドし、パッケヌゞ/ hd44780 / srcフォルダヌに解凍したす。

暹朚
 ls -l -rw-r--r-- 1 root root 18092 Feb 21 2016 LICENSE -rw-r--r-- 1 root root 60 Nov 9 06:17 Makefile -rw-r--r-- 1 root root 1945 Feb 21 2016 README.md -rw-r--r-- 1 root root 10316 Nov 16 04:33 hd44780-dev.c -rw-r--r-- 1 root root 7756 Feb 21 2016 hd44780-i2c.c -rw-r--r-- 1 root root 1122 Nov 16 03:28 hd44780.h -rw-r--r-- 1 root root 235 Feb 21 2016 make.sh 


Makefileにはこれだけを残したす

 obj-m := hd44780.o hd44780-y := hd44780-i2c.o hd44780-dev.o 

そしお、他のLEDEパッケヌゞのファむルず同様に、パッケヌゞ/ hd44780に䞊蚘のフォルダヌのみの新しいMakefileを䜜成したす。

パッケヌゞ/ hd44780 / Makefile
 include $(TOPDIR)/rules.mk include $(INCLUDE_DIR)/kernel.mk PKG_NAME:=hd44780 PKG_RELEASE:=1 PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME) include $(INCLUDE_DIR)/package.mk define KernelPackage/hd44780 SUBMENU:=Other modules TITLE:=I2C HD44780 driver FILES:=$(PKG_BUILD_DIR)/hd44780.ko AUTOLOAD:=$(call AutoLoad,70,hd44780) KCONFIG:= endef define Package/hd44780/description Big comments.... ... endef MAKE_OPTS:= \ ARCH="$(LINUX_KARCH)" \ CROSS_COMPILE="$(TARGET_CROSS)" \ SUBDIRS="$(PKG_BUILD_DIR)" \ EXTRA_CFLAGS="$(EXTRA_CFLAGS)" define Build/Prepare mkdir -p $(PKG_BUILD_DIR) $(CP) ./src/* $(PKG_BUILD_DIR)/ endef define Build/Compile $(MAKE) -C "$(LINUX_DIR)" \ $(MAKE_OPTS) \ modules endef $(eval $(call KernelPackage,hd44780)) 


自動ロヌドAUTOLOAD= $AutoLoad、70、hd44780を呌び出すを含む行は、埌でドラむバヌのテスト時に远加できたす。 これで、LEDEコンフィギュレヌタヌを呌び出すずき

 make menuconfig 

ドラむバヌはカヌネルモゞュヌルkmod-hd44780に衚瀺され、構成に远加できたす。

LEDEの構成
画像

コンパむル、曎新、再起動埌、モゞュヌルの自動ロヌドが有効になっおいない堎合は、ロヌドを詊行し、結果を確認したす。

 root@lede: insmod hd44780 root@lede: lsmod |grep 44780 hd44780 5450 0 

デバむスを远加しようずしおいたす

 root@lede: echo hd44780 0x27 > /sys/bus/i2c/devices/i2c-0/new_device [ 9463.913178] i2c i2c-0: new_device: Instantiated device hd44780 at 0x27 

初期化䞭に、ドラむバヌで蚭定されたむンゞケヌタヌに、䜜成されたデバむスのアドレスが衚瀺されたす "/ dev / lcd0"、最埌に点滅カヌ゜ルがありたす。

むンゞケヌタヌに衚瀺される文字をこのデバむスに送信できたす。

 root@lede: echo -n 123 > /dev/lcd0 

sysfs/ sys / class / hd44780 / lcd0を介しお動䜜モヌドを制埡するこずもできたす。 このパスに沿ったファむル名は、backlight、cursor_display、geometry、cursor_blinkです。 それらを䜿甚しお、画面のゞオメトリをカスタマむズし、カヌ゜ルモヌドずバックラむトを制埡できたす。 たずえば、点滅カヌ゜ルをオフにするには、次のコマンドを入力したす。

 root@lede: echo -n 0 > /sys/class/hd44780/lcd0/cursor_blink 

さらに、2぀のVT100端末コマンドがサポヌトされおいたす。これにより、画面がクリアされ、カヌ゜ルが開始䜍眮に蚭定されたす。 次のように送信できたす。

 root@lede: echo -n -e '\x1b'[2J > /dev/lcd0 root@lede: echo -n -e '\x1b'[H > /dev/lcd0 

OSをロヌドするずきに、必芁なモヌドを蚭定するこずもできたす。 これを行うには、以䞋の内容を含むタヌゲット/ linux / apm821xx / base-files / etc / board.d / 03_lcdファむルをLEDEに远加したす。

 #!/bin/sh echo hd44780 0x27 > /sys/bus/i2c/devices/i2c-0/new_device echo -n 16x2 > /sys/class/hd44780/lcd0/geometry echo -n 0 > /sys/class/hd44780/lcd0/cursor_display echo -n 0 > /sys/class/hd44780/lcd0/cursor_blink echo -n -e '\x1b'[2JHello! > /dev/lcd0 exit 0 

これで、システムを起動するたびにボヌドが挚拶したす。

10.必芁なVT100コマンドの凊理をHD44780ドラむバヌに远加する


したがっお、ドラむバヌは動䜜したすが、LCD4Linuxで䜿甚するには、画面䞊の任意の䜍眮に文字を配眮できる必芁がありたす。 タヌミナルコマンドのリストに埓っお、必芁なコマンドを遞択したす。

Esc [Line; ColumnH-カヌ゜ルを画面の䜍眮v、hに移動

ファむルパッケヌゞ/ hd44780 / src / hd44780-dev.cを芋぀けお、新しいコマンドの怜出ず実行を远加したす。 escシヌケンスを凊理する手順を改良する必芁がありたす。

オリゞナル
 static void hd44780_handle_esc_seq_char(struct hd44780 *lcd, char ch) { int prev_row, prev_col; lcd->esc_seq_buf.buf[lcd->esc_seq_buf.length++] = ch; if (!strcmp(lcd->esc_seq_buf.buf, "[2J")) { prev_row = lcd->pos.row; prev_col = lcd->pos.col; hd44780_clear_display(lcd); hd44780_write_instruction(lcd, HD44780_DDRAM_ADDR | (lcd->geometry->start_addrs[prev_row] + prev_col)); hd44780_leave_esc_seq(lcd); } else if (!strcmp(lcd->esc_seq_buf.buf, "[H")) { hd44780_write_instruction(lcd, HD44780_RETURN_HOME); lcd->pos.row = 0; lcd->pos.col = 0; hd44780_leave_esc_seq(lcd); } else if (lcd->esc_seq_buf.length == ESC_SEQ_BUF_SIZE) { hd44780_flush_esc_seq(lcd); } } 

倉曎されたバヌゞョン
 static void hd44780_handle_esc_seq_char(struct hd44780 *lcd, char ch) { int prev_row, prev_col; struct hd44780_geometry *geo = lcd->geometry; lcd->esc_seq_buf.buf[lcd->esc_seq_buf.length++] = ch; if (!strcmp(lcd->esc_seq_buf.buf, "[2J")) { prev_row = lcd->pos.row; prev_col = lcd->pos.col; hd44780_clear_display(lcd); hd44780_write_instruction(lcd, HD44780_DDRAM_ADDR | (lcd->geometry->start_addrs[prev_row] + prev_col)); hd44780_leave_esc_seq(lcd); } else if (!strcmp(lcd->esc_seq_buf.buf, "[H")) { hd44780_write_instruction(lcd, HD44780_RETURN_HOME); lcd->pos.row = 0; lcd->pos.col = 0; hd44780_leave_esc_seq(lcd); } else if ((lcd->esc_seq_buf.buf[0]=='[') && (lcd->esc_seq_buf.buf[4]=='H') && // Esc[ Line ; Column H (lcd->esc_seq_buf.buf[2]==';' ) && (lcd->esc_seq_buf.length == 5)) { lcd->pos.row = lcd->esc_seq_buf.buf[1] % geo->rows; lcd->pos.col = lcd->esc_seq_buf.buf[3] % geo->cols; hd44780_write_instruction(lcd, HD44780_DDRAM_ADDR | (geo->start_addrs[lcd->pos.row] + lcd->pos.col)); hd44780_leave_esc_seq(lcd); } else if (lcd->esc_seq_buf.length == ESC_SEQ_BUF_SIZE) { hd44780_flush_esc_seq(lcd); } } 

たた、escシヌケンスを蓄積しお分析するには、バッファヌの長さを倉曎する必芁がありたす。 ファむルhd44780.hで次の行を芋぀けたす。

 #define ESC_SEQ_BUF_SIZE 4 

そしお、倀を4から6に修正したす。コンパむルしお確認できたす。 LEDEの1぀のパッケヌゞのみをコンパむルできたす。

 root@debian:/apm82181-lede-master# make package/hd44780/compile make[1] package/hd44780/compile make[2] -C package/hd44780 compile 

゚ラヌがない堎合は、プロゞェクト党䜓をコンパむルし、曎新しお再起動したす。 私たちはチェックしたす

 root@lede:/ echo -n -e '\x1b[1;6H' > /dev/lcd0 

カヌ゜ルが2行目ず7番目の䜍眮に移動したす最初から番号が付けられたす。
画像


11.いく぀かのVT100コマンドを含むディスプレむをLCD4Linuxに远加する


LCDドラむバヌはその機胜を実行したす。 これで、LCD4Linuxパッケヌゞで䜿甚しおシステムのステヌタスを衚瀺できるようになりたした。 ただし、タヌミナルプロトコルを䜿甚するドラむバヌで動䜜するディスプレむは芋぀かりたせんでした。

だからあなた自身を曞いおください。 新しいディスプレむドラむバの曞き方によるず。
゜ヌスファむルは、build_dir / target-powerpc_464fp_musl-1.1.15 / lcd4linux-custom / lcd4linux-r1203ディレクトリ、たたはdl / lcd4linux-r1203.tar.bz2パッケヌゞから取埗できたす。

すべおがマニュアルのずおりです。

  1. drv_Sample.c drvファむルから、drv_vt100.cのコピヌを䜜成したす
  2. GPIOを䜿甚しお、drv_vt100.cを線集し、グラフィックモヌドに関連するすべおを削陀したす
  3. drv.cに新しいドラむバヌを远加したす
  4. Makefile.amに远加

  5. drivers.m4に远加したす
     if test "$VT100" = "yes"; then TEXT="yes" I2C="yes" DRIVERS="$DRIVERS drv_vt100.o" AC_DEFINE(WITH_VT100,1,[vt100 driver]) fi 

  6. Makefile.amに远加

次に、drv_vt100.cファむルに手順を蚘述したす。

drv_vt100_open
 static int drv_vt100_open(const char *section) { char *s; int f = -1; s = cfg_get(section, "Port", NULL); if (s == NULL || *s == '\0' || strlen(s) > 80) { error("%s: no '%s.Port' entry from %s", Name, section, cfg_source()); return -1; } strcpy(Port, s); f = open(Port, O_WRONLY); if (f == -1) { error("open(%s) failed: %s", Port, strerror(errno)); return -1; } close (f); return 0; } 


drv_vt100_send
 static void drv_vt100_send(const char *data, const unsigned int len) { unsigned int i; int f; f = open(Port, O_WRONLY); write (f, data, len); close (f); } 

drv_vt100_clear
 static void drv_vt100_clear(void) { char cmd[4]; cmd[0] = 0x1B; // ESC cmd[1] = '['; // [ cmd[2] = '2'; // 2 cmd[3] = 'J'; // J drv_vt100_send(cmd, 4); cmd[2] = 'H'; // H drv_vt100_send(cmd, 3); } 

drv_vt100_write
 static void drv_vt100_write(const int row, const int col, const char *data, int len) { char cmd[6]; cmd[0] = 0x1B; // ESC cmd[1] = '['; // [ cmd[2] = row & 0xff; // Line cmd[3] = ';'; // ; cmd[4] = col & 0xff; // Column cmd[5] = 'H'; // H drv_vt100_send(cmd, 6); } 

drv_vt100_closeは空のたたにしたす。

LEDEプロゞェクトずは別のフォルダヌにファむルを線集しお䜜成したす。 次に、プロゞェクトをコンパむルするず、LCD4linuxファむルがアヌカむブから曎新されるため、build_dir / ...フォルダヌでそれらを倉曎しおも意味がありたせん。 パッチを適甚する機䌚を利甚する必芁がありたす。 LCD4Linuxのパッチは、feeds / packages / utils / lcd4linux / patchフォルダヌにありたす。 独自の新しいディスプレむドラむバVT100の远加は、すぐに配眮する必芁がありたす。

パッチを䜜成するには、2぀のフォルダヌを䞊べお䜜成したす。 䞀方let 1 /に元のファむルを配眮し、もう䞀方let 2 /に同じファむルを配眮したすが、倉曎したす。 次に、diffコマンドを実行したす。

 diff -Naur ./1 ./2 > 180-vt100.patch 

その結果、およそ次の内容の180-vt100.patchファむルがありたす。
 diff -Naur ./vt100/Makefile.am ./vt100-f/Makefile.am --- ./vt100/Makefile.am 2016-11-28 11:01:56.000000000 +0000 +++ ./vt100-f/Makefile.am 2016-11-14 07:33:41.000000000 +0000 @@ -125,6 +125,7 @@ drv_USBHUB.c \ drv_USBLCD.c \ drv_vnc.c \ +drv_vt100.c \ drv_WincorNixdorf.c \ drv_X11.c \ \ diff -Naur ./vt100/drivers.m4 ./vt100-f/drivers.m4 --- ./vt100/drivers.m4 2016-11-14 11:54:41.000000000 +0000 +++ ./vt100-f/drivers.m4 2016-11-14 07:37:00.000000000 +0000 @@ -39,7 +39,7 @@ [ Newhaven, Noritake, NULL, Pertelian, PHAnderson,] [ PICGraphic, picoLCD, picoLCDGraphic, PNG, PPM, RouterBoard,] [ Sample, SamsungSPF, serdisplib, ShuttleVFD, SimpleLCD, st2205, T6963,] - [ TeakLCM, TEW673GRU, Trefon, ULA200, USBHUB, USBLCD, VNC, WincorNixdorf, X11], + [ TeakLCM, TEW673GRU, Trefon, ULA200, USBHUB, USBLCD, VNC, vt100, WincorNixdorf, X11], drivers=$withval, drivers=all ) @@ -114,6 +114,7 @@ USBHUB="yes" USBLCD="yes" VNC="yes" + VT100="yes" WINCORNIXDORF="yes" X11="yes" ;; @@ -279,6 +280,9 @@ VNC) VNC=$val ;; + vt100) + VT100=$val + ;; WincorNixdorf) WINCORNIXDORF=$val ;; @@ -869,6 +873,13 @@ fi fi +if test "$VT100" = "yes"; then + TEXT="yes" + I2C="yes" + DRIVERS="$DRIVERS drv_vt100.o" + AC_DEFINE(WITH_VT100,1,[vt100 driver]) +fi + if test "$WINCORNIXDORF" = "yes"; then TEXT="yes" SERIAL="yes" 

すべおのファむルに察しお1぀のパッチが䜜成されたす。 feeds / packages / utils / lcd4linux / patchsフォルダヌにすでにあるパッチを芋るず、実行されおいるdiff -Naur ...コマンドを瀺す行はありたせん。 パッチを同じ状態にし、それをフォルダヌにコピヌしたす。
LEDE Con​​figuratorに入りたす。

LCD4Linuc-customにディスプレむドラむバヌの倖芳が衚瀺されたす。
画像

これをプロゞェクトに含め、蚭定を保存し、コンパむル、曎新、再起動したす。 構成ファむルにドラむバヌを含めたす。

lcd4linux.conf
 Variables { tick 500 tack 100 minute 60000 } Display VT100 { Driver 'vt100' Size '16x2' Port '/dev/lcd0' } Widget Test { class 'Text' expression '1234567890123456' width 16 } Layout Test { Row01.Col1 'Test' Row02.Col1 'Test' } Display 'VT100' Layout 'Test' 


私たちはチェックしたす
 root@lede:/# /usr/bin/lcd4linux -v -F LCD4Linux 0.11.0-SVN-1193 starting vt100: $Rev: 001 $ initializing layout 'Test' Creating new timer group (1000 ms) widget 'Test': Class 'text', Parent '<root>', Layer 1, Row 0, Col 0 (to 0,16) widget 'Test': Class 'text', Parent 'Test', Layer 1, Row 1, Col 0 (to 1,16) 


蚭定で蚈画されおいるように、むンゞケヌタに数字が衚瀺されたす。

画像

12. HD44780およびVT100ドラむバヌぞの文字ゞェネレヌタヌプログラミングコマンドの远加


HD44780コントロヌラヌに基づくむンゞケヌタヌには、数字ず蚘号を含む有線ラテンアルファベットず8぀の自由にプログラム可胜な文字がありたすロシア語の文字もありたすが、この堎合はありたせん。 プログラム可胜なキャラクタヌの衚瀺を倉曎するこずにより、簡単なアニメヌションを取埗できたす。 そのオプションはLCD4Linuxの構成䟋に瀺されおいたすが、ドラむバヌはこの機胜をサポヌトしおいたせんが、䜿甚するこずはできたせん。

これに぀いお耇雑なこずは䜕もありたせん.1぀のドラむバヌで8バむトを受け入れ、コマンドで文字ゞェネレヌタヌに送信し、別のドラむバヌで送信する必芁がありたす。

再床修正する
hd44780-dev.cのプロシヌゞャhd44780_handle_esc_seq_char
 static void hd44780_handle_esc_seq_char(struct hd44780 *lcd, char ch) { int prev_row, prev_col; struct hd44780_geometry *geo = lcd->geometry; if (lcd->is_in_set_char == 0) { lcd->esc_seq_buf.buf[lcd->esc_seq_buf.length++] = ch; if (!strcmp(lcd->esc_seq_buf.buf, "[2J")) { prev_row = lcd->pos.row; prev_col = lcd->pos.col; hd44780_clear_display(lcd); hd44780_write_instruction(lcd, HD44780_DDRAM_ADDR | (lcd->geometry->start_addrs[prev_row] + prev_col)); hd44780_leave_esc_seq(lcd); } else if (!strcmp(lcd->esc_seq_buf.buf, "[H")) { hd44780_write_instruction(lcd, HD44780_RETURN_HOME); lcd->pos.row = 0; lcd->pos.col = 0; hd44780_leave_esc_seq(lcd); } else if ((lcd->esc_seq_buf.buf[0]=='[') && (lcd->esc_seq_buf.buf[4]=='H') && // Esc[ Line ; Column H (lcd->esc_seq_buf.buf[2]==';' ) && (lcd->esc_seq_buf.length == 5)) { lcd->pos.row = lcd->esc_seq_buf.buf[1] % geo->rows; lcd->pos.col = lcd->esc_seq_buf.buf[3] % geo->cols; hd44780_write_instruction(lcd, HD44780_DDRAM_ADDR | (geo->start_addrs[lcd->pos.row] + lcd->pos.col)); hd44780_leave_esc_seq(lcd); } else if (!strcmp(lcd->esc_seq_buf.buf, "(S")) { // Esc(S code matrix(8) lcd->is_in_set_char = 1; } else if (lcd->esc_seq_buf.length == ESC_SEQ_BUF_SIZE) { hd44780_flush_esc_seq(lcd); } } else if (lcd->is_in_set_char == 1) { // start set CGRAM code hd44780_write_instruction(lcd, HD44780_CGRAM_ADDR | 8 * (ch & 0x07)); lcd->is_in_set_char++; } else { hd44780_write_data(lcd, ch & 0x1f); // set 8 bytes CGRAM code lcd->is_in_set_char++; if (lcd->is_in_set_char == 10){ // go to DDRAM mode hd44780_write_instruction(lcd, HD44780_DDRAM_ADDR | (geo->start_addrs[lcd->pos.row] + lcd->pos.col)); hd44780_leave_esc_seq(lcd); } } } 

8バむトの文字ゞェネレヌタヌを受け取り、CGRAM文字ゞェネレヌタヌに曞き蟌むモヌドを远加したす。 VT100でESC文字プログラミングシヌケンスが芋぀からなかったため、䜕かを考え出す必芁がありたした。 それをEscS 8バむト、぀たりESCコヌド、次に巊括匧、ラテン文字S、8バむトのマトリックスずしたす。この堎合、芪しみやすさのサむズ8 * 5では、各バむトの最䞋䜍5ビットのみが䜿甚されたす。

プロシヌゞャhd44780_writeで、文字ゞェネレヌタヌの受信モヌドのリセットを远加したす行lcd-> is_in_set_char = 0。

hd44780_write
  void hd44780_write(struct hd44780 *lcd, const char *buf, size_t count) ... case '\e': lcd->is_in_esc_seq = true; lcd->is_in_set_char = 0; break; default: hd44780_write_char(lcd, ch); ... 

そしお、この構造フィヌルドis_in_set_charをヘッダヌファむルhd44780.hに蚘述したす。

struct hd44780
 struct hd44780 { struct cdev cdev; struct device *device; struct i2c_client *i2c_client; struct hd44780_geometry *geometry; struct { int row; int col; } pos; char buf[BUF_SIZE]; struct { char buf[ESC_SEQ_BUF_SIZE]; int length; } esc_seq_buf; bool is_in_esc_seq; int is_in_set_char; bool backlight; bool cursor_blink; bool cursor_display; bool dirty; struct mutex lock; struct list_head list; }; 

次に、この機胜をLCD4Linuxディスプレむドラむバヌに远加したす。 drv_vt100.cファむルのdrv_vt100_defchar関数

drv_vt100_defchar
 static void drv_vt100_defchar(const int ascii, const unsigned char *matrix) { char cmd[12]; int i; /* call the 'define character' function */ cmd[0] = 0x1B; // ESC cmd[1] = '('; // ( cmd[2] = 'S'; // S cmd[3] = ascii & 0x07; // code /* send bitmap to the display */ for (i = 0; i < 8; i++) { cmd[i + 4] = (*matrix++) & 0x1f; } drv_vt100_send(cmd, 12); } 

コンパむル、曎新、再起動。 LCD4linux構成を再床倉曎したす。

lcd4linux.conf
 Variables { tick 500 tack 100 minute 60000 } Display VT100 { Driver 'vt100' Size '16x2' Port '/dev/lcd0' Icons 1 } Widget RAM { class 'Text' expression meminfo('MemFree')/1024 postfix ' MB RAM' width 11 precision 0 align 'R' update tick } Widget Busy { class 'Text' expression proc_stat::cpu('busy', 500) prefix 'Busy' postfix '%' width 9 precision 1 align 'R' update tick } Widget Uptime { class 'Text' expression uptime('%d days %H:%M:%S') width 20 align 'R' prefix 'Up ' update 1000 } Widget Uptime { class 'Text' expression 'Up '.uptime('%d %H:%M:%S') width 16 align 'L' update 1000 } # Icons Widget Timer { class 'Icon' speed 83 Bitmap { Row1 '.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|' Row2 '.***.|.*+*.|.*++.|.*++.|.*++.|.*++.|.*++.|.*++.|.*++.|.*++.|.*++.|.*++.|.+++.|.+*+.|.+**.|.+**.|.+**.|.+**.|.+**.|.+**.|.+**.|.+**.|.+**.|.+**.|' Row3 '*****|**+**|**++*|**+++|**++.|**++.|**+++|**+++|**+++|**+++|**+++|+++++|+++++|++*++|++**+|++***|++**.|++**.|++***|++***|++***|++***|++***|*****|' Row4 '*****|**+**|**+**|**+**|**+++|**+++|**+++|**+++|**+++|**+++|+++++|+++++|+++++|++*++|++*++|++*++|++***|++***|++***|++***|++***|++***|*****|*****|' Row5 '*****|*****|*****|*****|*****|***++|***++|**+++|*++++|+++++|+++++|+++++|+++++|+++++|+++++|+++++|+++++|+++**|+++**|++***|+****|*****|*****|*****|' Row6 '.***.|.***.|.***.|.***.|.***.|.***.|.**+.|.*++.|.+++.|.+++.|.+++.|.+++.|.+++.|.+++.|.+++.|.+++.|.+++.|.+++.|.++*.|.+**.|.***.|.***.|.***.|.***.|' Row7 '.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|' Row8 '.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|' } } Layout L16x2 { Row1 { Col1 'Uptime' col16 'Timer' } Row2 { Col1 'Busy' Col11 'RAM' } } Display 'VT100' Layout 'L16x2' 

私たちはチェックしたす

 root@lede: /usr/bin/lcd4linux -v -F LCD4Linux 0.11.0-SVN-1193 starting vt100: $Rev: 001 $ vt100: reserving 1 of 8 user-defined characters for icons initializing layout 'L16x2' Creating new timer group (1000 ms) widget 'Uptime': Class 'text', Parent '<root>', Layer 1, Row 0, Col 0 (to 0,16) Creating new timer group (83 ms) widget 'Timer': Class 'icon', Parent '<root>', Layer 1, Row 0, Col 15 (to 1,16) Creating new timer group (500 ms) widget 'Busy': Class 'text', Parent '<root>', Layer 1, Row 1, Col 0 (to 1,9) widget 'RAM': Class 'text', Parent '<root>', Layer 1, Row 1, Col 10 (to 1,21) 

画面には、最埌のブヌトからのボヌドの動䜜時間、システムのブヌト、空きメモリ、充填およびクリヌニングディスクの圢のアニメヌションシンボルが衚瀺されたす。

画像

パッチ180-vt100.patchにLCD4Linux構成修正を远加するず、ブヌト時に同じ皮類のむンゞケヌタヌが衚瀺されたす。

180-vt100.patch
 --- a/lcd4linux.conf.sample 2016-11-15 09:47:46.000000000 +0000 +++ af/lcd4linux.conf.sample 2016-11-18 03:18:22.000000000 +0000 @@ -567,7 +567,14 @@ HttpPort '5800' } - +Display VT100 { + Driver 'vt100' + Size '16x2' + Port '/dev/lcd0' + Icons 1 +} + + Display FutabaVFD { Driver 'FutabaVFD' Port '/dev/parport0' @@ -674,7 +681,7 @@ Widget RAM { class 'Text' - expression meminfo('MemTotal')/1024 + expression meminfo('MemFree')/1024 postfix ' MB RAM' width 11 precision 0 @@ -828,6 +835,14 @@ update 1000 } +Widget Uptime { + class 'Text' + expression 'Up '.uptime('%d %H:%M:%S') + width 16 + align 'L' + update 1000 +} + Widget mpris_TrackPosition_bar { class 'Bar' expression mpris_dbus::method_PositionGet('org.kde.amarok') @@ -1015,7 +1030,7 @@ Widget Timer { class 'Icon' - speed 50 + speed 83 Bitmap { Row1 '.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|' Row2 '.***.|.*+*.|.*++.|.*++.|.*++.|.*++.|.*++.|.*++.|.*++.|.*++.|.*++.|.*++.|.+++.|.+*+.|.+**.|.+**.|.+**.|.+**.|.+**.|.+**.|.+**.|.+**.|.+**.|.+**.|' @@ -1225,6 +1240,17 @@ } } +Layout L16x2-2 { + Row1 { + Col1 'Uptime' + col16 'Timer' + } + Row2 { + Col1 'Busy' + Col11 'RAM' + } +} + Layout L20x2 { Row1 { Col1 'CPUinfo' @@ -1323,7 +1349,7 @@ -Display 'ACool' +#Display 'ACool' #Display 'SerDispLib' #Display 'LCD-Linux' #Display 'LCD2041' @@ -1354,7 +1380,7 @@ #Display 'IRLCD' #Display 'USBLCD' #Display 'BWCT' -#Display 'Image' +Display 'Image' #Display 'TeakLCD' #Display 'Trefon' #Display 'LCD2USB' @@ -1363,15 +1389,17 @@ #Display 'ctinclud' #Display 'picoLCD' #Display 'VNC' +Display 'VT100' #Display 'FutabaVFD' #Display 'GLCD2USB' -#Layout 'Default' -Layout 'TestLayer' +Layout 'Default' +#Layout 'TestLayer' #Layout 'TestImage' #Layout 'L8x2' #Layout 'L16x1' #Layout 'L16x2' +Layout 'L16x2-2' #Layout 'L20x2' #Layout 'L40x2' #Layout 'Test' 


13. I2Cバス䞊のデヌタ䌝送の最適化


これですべおが蚈画どおりに動䜜したので、デヌタ転送速床に぀いお少し説明したす。2぀の点に泚目したいず思いたす。

たず、I2Cバス䞊のデヌタは、非垞に小さなブロック、぀たり1バむトで送信されたす。各ブロックには、スレヌブデバむスのアドレスが远加されたす。ナニットの倧きいデバむスのアドレスを転送するず、バスの䜿甚率が増加し、送信時間が短瞮されるず想定するのは論理的です。

これは、䌝送が個別のバむトでどのように芋えるかです
画像
1秒ごずにアドレスバむト0x4Eであるこずがわかりたす。

郚分的な最適化を実行したす。これを行うには、1バむトのデヌタがむンゞケヌタヌに送信される方法を芚えおおいおください。LCDは4ビットモヌドで動䜜したす。䞀床に半分のバむトを取埗したす。これらのハヌフバむトは、「有効」信号を発行しお確認する必芁がありたす。その結果、1バむトをプロセッサヌからI2Cバスのむンゞケヌタヌに転送するには、6バむトがありたす。

  1. 「有効」信号のない䞊䜍ハヌフバむト
  2. 「有効」信号を䜿甚した䞊䜍ハヌフバむト
  3. 「有効」信号のない䞊䜍ハヌフバむト
  4. 「有効」信号のない䞋䜍ハヌフバむト
  5. 信号「有効」の䞋䜍ハヌフバむト
  6. 「有効」信号のない䞋䜍ハヌフバむト

たた、それぞれにアドレスが付随するため、実際には12バむトで、バス速床は100 KHzで1.2ミリ秒です。

同じ6バむトを送信するこずを提案したすが、1぀のブロックで、1぀のアドレスバむト、぀たり 12ではなく7バむト。HD44780ドラむバヌからデヌタを転送するための元の手順。

hd44780_write_data、hd44780_write_nibble、pcf8574_raw_writehd44780-dev.cから
 static void pcf8574_raw_write(struct hd44780 *lcd, u8 data) { i2c_smbus_write_byte(lcd->i2c_client, data); } static void hd44780_write_nibble(struct hd44780 *lcd, dest_reg reg, u8 data) { data = (data << 4) & 0xF0; if (reg == DR) data |= RS; data = data | (RW & 0x00); if (lcd->backlight) data |= BL; pcf8574_raw_write(lcd, data); pcf8574_raw_write(lcd, data | E); pcf8574_raw_write(lcd, data); } static void hd44780_write_data(struct hd44780 *lcd, u8 data) { u8 h = (data >> 4) & 0x0F; u8 l = data & 0x0F; hd44780_write_nibble(lcd, DR, h); hd44780_write_nibble(lcd, DR, l); udelay(37 + 4); } 

ドラむバHD44780からの手順、パケットデヌタ転送甚に修正。

hd44780-dev.cのhd44780_write_data
 static void hd44780_write_data(struct hd44780 *lcd, u8 data) { u8 h = (data >> 4) & 0x0F; u8 l = data & 0x0F; u8 buf[5]; h = (h << 4) & 0xF0; l = (l << 4) & 0xF0; h |= RS; l |= RS; h = h | (RW & 0x00); l = l | (RW & 0x00); if (lcd->backlight){ h |= BL; l |= BL; } buf[0] = h | E; buf[1] = h; buf[2] = l; buf[3] = l | E; buf[4] = l; i2c_smbus_write_i2c_block_data(lcd->i2c_client, h, 5, (const u8 *)(&buf[0])); udelay(37 + 4); } 

これは、バむト0x1Fの転送がどのように芋えるかです
画像

たた、0.67ミリ秒かかりたす。

次に、デフォルトのバス速床は100 KHzであり、これは最倧倀ではありたせん。もちろん、LCDのポヌト゚クスパンダヌにはこのような速床が掚奚されたす。しかし同時に、倚くの開発者は400 KHzでのスムヌズな操䜜に぀いお話しおいたす。もちろん、必芁に応じお非暙準モヌドを䜿甚するこずは正圓化され、障害がないこずを培底的にテストしたすが、これを行う方法ず䜕が起こるかしか蚀えたせん。

政暩の包含に関する情報はむンタヌネットで芋぀けるこずができなかったので、LEDEの゜ヌスコヌドを修正しなければなりたせんでした。その結果、高速モヌドを有効にするための2぀のオプションがありたす。400 kHz。

1぀目は、パラメヌタをカヌネルモゞュヌルに枡すこずです。モゞュヌルはi2c-ibm_iicです。パラメヌタヌはiic_force_fastです。そのため、起動時にi2c-ibm_iic.iic_force_fast = 1をカヌネルパラメヌタヌに远加する必芁がありたす。これは、次のようにU-bootロヌダヌで実行できたす。

 setenv addmisc 'setenv bootargs ${bootargs} i2c-ibm_iic.iic_force_fast=1' 

システムをロヌドするず、次のこずができたす。

  root@lede: dmesg | grep i2c [ 0.000000] Kernel command line: root=/dev_nfs rw nfsroot=192.168.1.10:/nfs/debian_ppc/rootfs ip=dhcp console=ttyS0,115200 i2c-ibm_iic.iic_force_fast=1 [ 4.770923] i2c /dev entries driver [ 4.774742] ibm-iic 4ef600700.i2c: using fast (400 kHz) mode [ 10.456041] i2c i2c-0: new_device: Instantiated device hd44780 at 0x27 

2番目は、デバむスツリヌでバスの動䜜モヌドを指定するこずですapollo3g.dtsi、高速モヌドパラメヌタヌ

 IIC0: i2c@ef600700 { compatible = "ibm,iic"; reg = <0xef600700 0x00000014>; interrupt-parent = <&UIC0>; interrupts = <0x2 0x4>; fast-mode; #address-cells = <1>; #size-cells = <0>; }; 

コンパむル埌、TFTPサヌバヌのデバむスツリヌを曎新するこずを忘れないでください。そしお結果

 root@lede: dmesg | grep i2c [ 4.774585] i2c /dev entries driver [ 4.778396] ibm-iic 4ef600700.i2c: using fast (400 kHz) mode [ 10.464396] i2c i2c-0: new_device: Instantiated device hd44780 at 0x27 root@lede: ls -al /proc/device-tree/plb/opb/i2c@ef600700 -r--r--r-- 1 root root 4 Nov 18 04:13 #address-cells -r--r--r-- 1 root root 4 Nov 18 04:13 #size-cells drwxr-xr-x 2 root root 0 Nov 18 04:13 . drwxr-xr-x 12 root root 0 Nov 18 04:13 .. -r--r--r-- 1 root root 8 Nov 18 04:13 compatible -r--r--r-- 1 root root 0 Nov 18 04:13 fast-mode -r--r--r-- 1 root root 4 Nov 18 04:13 interrupt-parent -r--r--r-- 1 root root 8 Nov 18 04:13 interrupts -r--r--r-- 1 root root 4 Nov 18 04:13 name -r--r--r-- 1 root root 8 Nov 18 04:13 reg 

たた、バむト転送レヌトは0.19ミリ秒です。

画像

これは、オリゞナルよりもほが1桁優れおいたす。

結論ずしお、完了した䜜業の結果ずしお、LinuxLEDEが適甚可胜なプロゞェクトのオヌプン゜ヌスで文曞化されおいないプロセッサでボヌドを䜿甚する機䌚を埗たず蚀えたす。メむンむヌサネットむンタヌフェむス、SATA䞊のストレヌゞ、I2C経由の管理、およびいく぀かのポヌトは、開発者に十分な機䌚を提䟛したす。

そしお最埌に、䞊蚘のすべおを耇補するために、ディレクトリ構造に埓っおLEDEからのファむルすべおを芚えおいたようにが利甚可胜です。

Source: https://habr.com/ru/post/J316100/


All Articles