2018.12.09

自宅近くでマンションを探してみたけれど

本郷事務所の撤収に伴い、今後作業する部屋が必要と思い、自宅の近くでワンルームマンションを探していました。

机が最低で2個は置けなければならないし、事務作業とはんだ付けの机は分けたい、オシロやファンクションジェネレータなどの機材も置きたいので8畳は必要かなと思っていました。

オンラインの賃貸情報で数十件は見て、現地で内見も6件くらいして、だいたいこの地域の感覚がつかめてきたところで、こんな感じの超優良物件を見つけたのです。

築浅で、ほぼ新築です。

Bukken

さっそく内見をさせてもらったところ、築浅だけあってピカピカで、広さも問題なく(といってもキッチンも含めて10畳なので実質的には8畳程度)。

この地域では破格の賃料で、礼金も仲介手数料も不要、保証会社もいらないから保証金もない。すぐに契約して来週から入居可能という感じでした。

こんな超優良物件があってよいのかと興奮して帰ったのですが、フライングスター風水で調べてみると大変悪い物件だったのです。

8e

わかる人にはわかるチャートです。

風水はちょっとかじった程度ですが、悪い物件であることはすぐにわかります。

簡単に言ってしまえば、8、9、1という数字が良い数字で、2や5や7が悪い数字です。

88の部分が風呂トイレになっていてラッキーゾーンが全く活かせません。右下の97が洗濯機置き場になっていて使えないので、人の運勢も弱くなる。

オフィスの机はどこに置けばよいでしょうか?キッチンの隣に置いたら不幸になり、ベランダの横に置いたら病気になるでしょう。左下の79のところに置くと、人との争いごとになり、唯一無害な34の部分はベランダの出口を塞ぐので使えなさそう。

この物件に入居しても、何も良いことがなさそうです。

sun

非科学的と思う人もいるかもしれませんが、風水というのは本当に馬鹿にできないものです。

最近やっと気が付いたのですが、特電の本郷のオフィスは真ん中が95になっていて、今年の年飛星が9なので1年間の入囚が起きていたのです。

左側にある数字9と年飛星が被っていることを入囚というのですが、入囚すると運勢がロックされて、良いことがなくなります。

つまり、本郷のこのオフィスは2018年の2月~2019年の2月までの1年間、人に関する運が悪くなります。しかも11月の月飛星が5だから、2018年12月は人もお金も入囚していた最悪の月だったのです。

20年の入囚だけでなく、1年や1か月の入囚がこんなにも悪い力を出すとは思ってもいませんでした。

11月の終わりに気が付いて、入囚を解除する対策を施したらいきなり売上が改善したので、本当に不思議。でも改善にも限度があるので、この本郷オフィスは早く撤収することが吉です。

もっと早くに気が付いていればよかった!

| | コメント (0)

2018.12.06

Intel(ALTERA)のMAX10キットを試す

MITOUJTAGでMAX10がどう見えるかを試してみたくてIntelのMAX10評価ボード「10M50 Evaluation Kit」を購入しました。

Max10_kit_top

このボードは、MAX10の最大クラスである10M50DAF484C6GESを中心に、1G ビット(64Mx16)LPDDR2 SDRAMや、HDMI出力、CSI入出力が搭載されています。

Max10_kit_bot

HDMI出力はAnalogDevicesのADV7513を使って作られていて、I/O直結にはなっていないようです。

Max10_kit_block

MAX10のほか、MAX2も乗っていて、MAX2とCypressのEZ-USB FX2によりオンボードのUSB Blaster2を構成しています。

このボードをUSB給電で動かす際のポイントを書きます。

  • 付属する赤と黒のコネクタが付いた変なUSBケーブルは、黒いコネクタを使う
  • USBから給電する際には、J11を2-3のほうに差し替える

さて、電源を入れると動き出してLEDが点滅するわけですが、MITOUJTAGから認識しようとしても残念ながらUSB Blaster2を認識しませんでした。

Usbblaster2

どうやらUSB BlasterとUSB Blaster2は全く別物のようです。

そこで特電のUSB-JTAGケーブルをつなごうとしたのですが、それでもデバイスを認識しません。

MAX10キットの回路図を見たところ、2番ピンがUSB_DISABLEとなっていました。外部からUSB Blasterをつなぐ場合はGNDとショートされるはずです。ここをLレベルにするとオンボードのUSB Blaster2が無効になります。

Jtag_connector

というわけで、Pocket JTAG Cableの青い線をつないで、MITOUJTAGでLに設定しました。

Max10_usbjtag_disable

これでMAX10が認識されるかと思ったら、今度は不明なデバイスが2個見つかりました。

Max10kit_unknown

1つ目のデバイスのIDCODEは0620A1BB、2つ目のデバイスのIDCODEは020D10DDでした。この020D10DDというデバイスはUSB Blaster2を構成しているMAX2の中に存在する仮想的なデバイスだそうです。

読み解いた感じでは下の図のようになっています。

Vtap

最初のデバイスのIDCODE「0620A1BB」というのは正しくはMAX10のIDCODEで031050DDのはずです。

何かがバグって1bit左にシフトしているようです。VTAPのIDCODEレジスタが33bitあるのかな??

なお、Qualtusのプログラマでは次のように見えます。

Qpro1

sun

SW2.4をONにすると、MITOUJTAGでも普通のチェーン構成として見えるようになります。

Sw24

これでようやくMITOUJTAGで普通にMAX10がスキャンできるようになりました。

Max10_bscan

| | コメント (0)

2018.12.05

ZYNQ LinuxからのUSBメモリ書き込み速度

ZynqとLinuxで計測システムを作ったときに、どのくらいの速度で記録ができるのかという疑問を晴らすために、Zynq LinuxからUSBメモリに書き込む速度を測定してみました。

使用したZYNQのシステムは、Cosmo-Z Mini

Zynq_usbmem

この中にはXC7Z020が入っていて、Ubuntu Linux 14.04が起動しています。

いろいろなメモリカードやUSBメモリを用意しました。

  • TOSHIBAの32GB USBメモリ
  • SDカードリーダとTOSHIBAの16GB MicroSD (秋月)
  • Buffaloの8GB USBメモリRUF3-K8GA-BK

Zynq_usbmem1

これらのメモリにデータを書き込むわけですが、一番シンプルなのはddコマンドを使って乱数を書き込む方法です。

dd if=/dev/urandom of=/usbmem/test.bin bs=1048576 count=12000

結果の表示は 

・・・
12577055296 バイト (13 GB) コピーされました、 947.968 秒、 13.3 MB/秒

これではあまりにもシンプルすぎてつまらないので、自分でプログラムを作って書き込むことにしました。

#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>
#include <iostream>
#include <fstream>
#include <cstdlib>

const long long blocksize = 1000000;

void showspeed(struct timeval* start, int block) {
	struct timeval current;
	gettimeofday(&current, NULL);
	printf("%lld\t", (long long)blocksize * block / 1000000);
//	printf("Total %lld[MB],", (long long)blocksize * block / 1000000);
	printf("%ld\t", current.tv_sec - start->tv_sec);
//	printf("%ld[sec]", current.tv_sec - start->tv_sec);
	if(current.tv_sec != start->tv_sec) {
		double elapsed = (current.tv_sec - start->tv_sec) * 1000000 + (current.tv_usec - start->tv_usec);
		printf("%3.2f\n", (double)(blocksize * block) / elapsed);
//		printf(", Write throughput=%3.2fMB/s\n", (double)(blocksize * block) / elapsed);
	}
	else {
		printf("\n");
	}
}

int main(int argc, char *argv[]) {
	struct timeval start;

	if(argc < 3) {
		printf("usage: memfill size(GB) filename\n");
		return 1;
	}
	double size = atof(argv[1]);
	char *filename = argv[2];

	unsigned char *tmp = new unsigned char [blocksize];
	for(int j=0;j<blocksize;j++) {
		tmp[j] = rand();
	}

    std::ofstream ofs(filename,std::ios::out | std::ios::trunc | std::ios::binary);
    if (!ofs) {
        std::cerr << "error" << std::endl;
        std::exit(EXIT_FAILURE);
    }

	printf("[MB]\t[sec]\t[MB/sec]\n");

	gettimeofday(&start, NULL);
	int block;
	for(block = 0; block < size * 1000 ; block++) {
		if((block % 100) == 0) {
			showspeed(&start,block);
		}
		ofs.write((char *)tmp,blocksize);
	}
	showspeed(&start,block);

	ofs.close();
	
	delete[] tmp;
}
 

ddと比べても速度に差はなかったので、このプログラムで計測することにしました。

このプログラムを実行すると次のような表示が出ます。

Zynq_usbmem4

100MB書き込んだときは平均23.32MB/sで、500MBのときは平均14.94MB/sで、というふうに読みます。最初はおそらくキャッシュが効いていて速いのですが、だんだん遅くなってくるのがわかります。

書き込み速度のグラフを示します。

Zynq_usbmem2

サイズが大きくなるとだんだん遅くなるのがわかりますね。このまま12GBまで続けてもそれほど変わらないので、2GBで打ち切っています。

下のほうを拡大してみます。

Zynq_usbmem3

one 意外なことに、一番速かったのは、秋月で売っている東芝のMicroSDカードをext4でフォーマットしてUSBカードリーダに挿したものでした。14GB/s出ています。このMicroSDカードをFAT32にするとわずかに遅くなります。

two 次点はBuffaloのUSBメモリ(RUF3-K8GA-BK)をext4でフォーマットしたもの(水色)なのですが、RUF3-K8GA-BKはFAT32にすると激遅(黄色の線)になります。

RUF3-K8GA-BKはUSB3.0のインタフェースを積んでいるくせに、Windowsパソコンから書き込んでも7MB/secしか出ません。Amazonのレビューでも遅さが指摘されています。

three Cosmo-Z Miniは4GBのeMMCを積んでいるのですが、意外と遅いようです。10MB/sec前後です。

four しかし、一番遅いのはWindowsで使いまわしている東芝のUSBメモリで、すでにいろいろなファイルが入っているものです。

結論を言うと、

  • USBメモリの種類によってかなりばらつきがある。東芝のMicro USB速い!
  • ext4でまっさらな状態にフォーマットして使うと速くなる
  • すでに使用中のUSBメモリカードに追記すると遅くなる

という感じでした。

メモリカードと機材を選べば10MB/s以上で連続してデータを記録できそうですね。

| | コメント (1)

2018.11.29

粗大ごみの回収に向けて

明日、粗大ごみの回収が来るので、オフィス家具などをまとめていました。

机などもたくさん出して、オープンスペースが広くなってきました。

1129_3

写真のダンボールはレンタル倉庫に送ります。

1129_1

椅子さん、さようなら。

1129_2

なお、移転先はまだ決まっていません。

| | コメント (0)

2018.11.26

XILINXのJTAG to AXI masterのプロトコル

JTAG to AXI masterは便利そうなのですが、Vivadoを起動しないと使えず、またtclで操作するとか、操作するシーケンスをcreateしたりdestroyしたりと、使い勝手の面ではよいとは言えません。

そこで、どのようなプロトコルで通信しているかを探りました。

実験に使ったボードは特電Artix-7ボード

Artixboardt_4

USB3.0に対応していて、オンボードでUSB-JTAGも乗っていて、2.54mmピッチのピンヘッダがあるのが便利です。

Artix-7用に、Vivadoで下の図のようなデザインを作ります。

Jaxi1

そして、VivadoとMITOUJTAGを接続し、Vivadoが出力するJTAGシーケンスをキャプチャします。

Vivadoは以下のようなシーケンスを大量に吐き出します。

SIR 6 TDI (02) TDO (35);
SDR 32 TDI (04900180) TDO (04900101);
SDR 17 TDI (00400) TDO (00000);
SDR 37 TDI (00060008A9) TDO (0160008000);

最初のSIR 6 TDI (02)は、USER1という命令です。

USER1命令の後は、SDR 32 (データレジスタへの32bitシフト)か、SDR 17 (データレジスタへの17bitシフト)かのどちらかです。

SDR32の中身は04900180か04800100、00000000であることが多く、SDR17の中身は00000 00400 00500 00600 0F000など様々です。

XILINXのILA、VIO、JTAG2AXIはいずれも共通のJTAGコンポーネントを使っているようで、(※ALTERAに例えればJTAG HUB)、何かのHUB的なものの下に複数のJTAGサブコンポーネントをぶら下げているようです。

そのため、JTAG HUB的な何かをコントロールするのが04900180などのコマンドではないかと想像できます。

そして、各コンポーネントのレジスタに具体的な値を与えているのが、

SIR 6 TDI (3F) TDO (35);
SIR 6 TDI (02) TDO (35);
SDR 32 TDI (04900180) TDO (04900101);
SDR 17 TDI (00400) TDO (00000);
SDR 37 TDI (00060008A9) TDO (0160008000);
SIR 6 TDI (3F) TDO (35);
SIR 6 TDI (02) TDO (35);
SDR 32 TDI (04900180) TDO (04900101);
SDR 17 TDI (00500) TDO (00000);
SDR 27 TDI (1FFF0A9) TDO (7F00000);
SIR 6 TDI (3F) TDO (35);
SIR 6 TDI (02) TDO (35);
SDR 32 TDI (04900180) TDO (04900101);
SDR 17 TDI (00600) TDO (00000);
SDR 139 TDI (000000000000000000000000000000000A9) TDO (0000000003F000818081000380008038800);
SIR 6 TDI (3F) TDO (35);
SIR 6 TDI (02) TDO (35);

というSDR17のシーケンス。この00400,00500,00600という順番で3個セットで繰り返し出てきます。また、たまに0F000と00000も出てきます。

00400の後はSDR37で、00500の後はSDR27、00600の後はSDRの長さは可変です。そして、データレジスタの末尾は必ずA9になっています。

出てくるパターンをまとめると、

  • SDR32 04900180 -> SDR17 0F000 -> 75bit
  • SDR32 04900180 -> SDR17 00000 -> 1243bit
  • SDR32 04900180 -> SDR17 00400 -> 37bit
  • SDR32 04900180 -> SDR17 00500 -> 27bit
  • SDR32 04900180 -> SDR17 00600 -> 可変

となります。

そんな感じの心の目で見ていくと、VivadoのTclを通じてJTAG2AXIに

create_hw_axi_txn wr [get_hw_axis hw_axi_1] -len 1 -address 40001234 -data 55555555 -type write
run_hw_axi wr
delete_hw_axi_txn wr

で書き込んだ値を出力したと思われる箇所が見つかりました。

SIR 6 TDI (3F) TDO (35);
SIR 6 TDI (02) TDO (35);
SDR 32 TDI (04900180) TDO (04900101);
SDR 17 TDI (00400) TDO (00000);
SDR 37 TDI (00000001A9) TDO (0160008000);
SIR 6 TDI (3F) TDO (35);
SIR 6 TDI (02) TDO (35);
SDR 32 TDI (04900180) TDO (04900101);
SDR 17 TDI (00500) TDO (00000);
SDR 27 TDI (00006A9) TDO (7FF0000);
SIR 6 TDI (3F) TDO (35);
SIR 6 TDI (02) TDO (35);
SDR 32 TDI (04900180) TDO (04900101);
SDR 17 TDI (00600) TDO (00000);
SDR 27 TDI (00000A9) TDO (1001000);
SIR 6 TDI (3F) TDO (35);
SIR 6 TDI (02) TDO (35);
SDR 32 TDI (04900180) TDO (04900101);
SDR 17 TDI (00400) TDO (00000);
SDR 37 TDI (00020002A9) TDO (0000001800);
SIR 6 TDI (3F) TDO (35);
SIR 6 TDI (02) TDO (35);
SDR 32 TDI (04900180) TDO (04900101);
SDR 17 TDI (00500) TDO (00000);
SDR 27 TDI (20011A9) TDO (0006000);
SIR 6 TDI (3F) TDO (35);
SIR 6 TDI (02) TDO (35);
SDR 32 TDI (04900180) TDO (04900101);
SDR 17 TDI (00600) TDO (00000);
SDR 42 TDI (055555555A9) TDO (2AAA8000000);
SIR 6 TDI (3F) TDO (35);
SIR 6 TDI (02) TDO (35);
SDR 32 TDI (04900180) TDO (04900101);
SDR 17 TDI (00400) TDO (00000);
SDR 37 TDI (00020004A9) TDO (0020002000);
SIR 6 TDI (3F) TDO (35);
SIR 6 TDI (02) TDO (35);
SDR 32 TDI (04900180) TDO (04900101);
SDR 17 TDI (00500) TDO (00000);
SDR 27 TDI (20010A9) TDO (0011800);
SIR 6 TDI (3F) TDO (35);
SIR 6 TDI (02) TDO (35);
SDR 32 TDI (04900180) TDO (04900101);
SDR 17 TDI (00600) TDO (00000);
SDR 74 TDI (04000123400498400A9) TDO (091A0024C2000000000);
SIR 6 TDI (3F) TDO (35);
SIR 6 TDI (02) TDO (35);
SDR 32 TDI (04900180) TDO (04900101);
SDR 17 TDI (00400) TDO (00000);
SDR 37 TDI (00000001A9) TDO (0020004000);
SIR 6 TDI (3F) TDO (35);
SIR 6 TDI (02) TDO (35);
SDR 32 TDI (04900180) TDO (04900101);
SDR 17 TDI (00500) TDO (00000);
SDR 27 TDI (00003A9) TDO (0010000);
SIR 6 TDI (3F) TDO (35);
SIR 6 TDI (02) TDO (35);
SDR 32 TDI (04900180) TDO (04900101);
SDR 17 TDI (00600) TDO (00000);
SDR 27 TDI (00000A9) TDO (0000000);
SIR 6 TDI (3F) TDO (35);
SIR 6 TDI (02) TDO (35);
SDR 32 TDI (04900180) TDO (04900101);
SDR 17 TDI (00400) TDO (00000);
SDR 37 TDI (00000001A9) TDO (0000001800);
SIR 6 TDI (3F) TDO (35);
SIR 6 TDI (02) TDO (35);
SDR 32 TDI (04900180) TDO (04900101);
SDR 17 TDI (00500) TDO (00000);
SDR 27 TDI (00004A9) TDO (0003800);
SIR 6 TDI (3F) TDO (35);
SIR 6 TDI (02) TDO (35);
SDR 32 TDI (04900180) TDO (04900101);
SDR 17 TDI (00600) TDO (00000);
SDR 27 TDI (00000A9) TDO (0000800);
STATE RESET;

どうやら、データを先に与えてからコマンドを与えるようです。

ただ、この部分シーケンスをSVFプレイヤーで流し込んでも、LEDは変化しませんでした。もっと前後の長い部分を流さなければならないようですが、ちょっと間違えるとVivadoのRefreshの操作をしないと戻らなくなります。

結論としては、JTAG to AXI masterのプロトコルは非常に長く、1ワードのAXIトランザクション発行のために数十行のJTAGコマンドを発行しなければならず、効率が良くありません。

プロトコルも難解でリバースエンジニアリングするのは容易ではなさそうです。

その上、エラーが起きたときの復帰が難しいので、無理に解読して自分のソフトウェアで使えるようにするのは得策ではないと考えられます。

| | コメント (0)

2018.11.25

Cosmo-Z Miniのファームウェアアップデート・スクリプトを作った

ZYNQ搭載の小型高速ADCシステム「Cosmo-Z Mini」のシステムは、boot.binや、メインのelfファイル、Webブラウザで動くアプリケーションなど様々なファイルで成り立っています。

こういったファイルを一括で更新するためのスクリプトを作成しました。

1527731222_1525757428_cszmini_sma_f

アップデート方法の詳細は

http://www.cosmoz.jp/update.html

のページに記載しましたが、wgetに-q -Nオプションを付けて、サーバから最新の更新スクリプトをダウンロードしてきます。

-qは進捗を画面に表示させないオプション、-Nは、サーバとローカルで日付を比較して、サーバのほうが新しければダウンロードするというオプションです。

そして、ダウンロードしたスクリプトを実行するのですが、ダウンロードしたスクリプトの中もwget -q -Nの羅列となっています。

また、

echo "  Enter [y|yes|YES] to execute."
read input

でユーザ入力を促して、

if [ -z $input ] ; then
	echo "  コンフィグは行われませんでした。"
elif [ $input = 'yes' ] || [ $input = 'YES' ] || [ $input = 'y' ] ; then
	chmod 600 /home/share/cszmain.elf
	echo "Stopping 'cszmain.elf' process."
	killall cszmain.elf
	echo "Check and download firmware '$BITFILE'"
	wget $WGETOPTION http://www.cosmoz.jp/files/$BITFILE -O /tmp/tmp.bit
	if [ $? -ne 0 ] ; then
		echo "file not found."
		exit 1
	fi
	echo "Wait more 2sec"
	sleep 2s
	echo "Execute configuration via /dev/xdevcfg. Sorry if hang-up"
	sleep 1s
	if [ -s /tmp/tmp.bit ]; then
		cat /tmp/tmp.bit > /dev/xdevcfg
		rm /tmp/tmp.bit
	fi
	chmod 777 /home/share/cszmain.elf
	echo "....."
	echo "Run setup script"
	echo "----------------"
	/home/share/setup
	echo "----------------"
	echo "done"
	exit 0
fi

でyesが押されれば、bitファイルをサーバからダウンロードしてきて、/dev/xdevcfgに流し込むようになっています。

アプリからPLのAXIにアクセスしている最中に/dev/xdevcfgを使ってコンフィグするとハングアップするので、まずアプリを止めてから実行権限を消して、他人が実行できないようにして、それから初めてxdevcfgを使ってコンフィグし、その後にアプリを再び実行可能なようにしています。

sun

更新した結果、Cosmo-Z Miniでちゃんとイベントキャプチャができるようになりました。

Filewave

NaI + PMTで4時間取ったスペクトラムもそれなりに出るようになりました。

Spec

sun

次は、このような自動更新スクリプトをさらに一歩進めて、「更新があります」というのをユーザに通知するような仕組みを作っていきたいと思います。

| | コメント (0)

2018.11.24

XILINXのJTAG to AXI masterの使い方

本日、RTLを語る会に参加して、JTAG to AXI masterというものを紹介していただきました。

JTAGからAXIのトランザクションを発行するというもののようですが、気になったので、早速試してみました。

テストに使ったボードは、Ultra96ボードです。

まず、下の図のようなブロックデザインを作ります。

Axi_jtag_sample

jtag_axi_0というのがそのコンポーネントで、M_AXIの出力をBlockRAMにつなぐと同時にsystem_ilaに入れて波形を見ることができるようにしました。

つまり、JTAGから操作したAXIの波形を、ILAで見ようというわけです。

これを論理合成して、Bitstreamをダウンロードしたら、HardwareManagerを開きます。

Axi_jtag_setting

そして、AWREADY==1でトリガがかかるように設定します。

JTAGコマンドの発行はTclのコンソールで行います。

上の図では画面下の細長いところです。

create_hw_axi_txn wr [get_hw_axis hw_axi_1] -len 4 -address c0000003 -data 0000000F_00000001_0200000F_0005000F -type write
run_hw_axi wr
delete_hw_axi_txn wr

このように、createでコマンドを作って、runで実行して、deleteで消すという、大変面倒くさいコマンド体系になっています。コマンドの詳細はUG908の205ページあたりを見ると書いてあります。

バーストライトも発行できるのはありがたいですね。

実際にキャプチャされた波形を示します。

Axi_jtag_waveform

ご覧のとおり、ちゃんと長さ4のバーストライトの波形が出て、それをILAでキャプチャできました。

このコマンドの面倒臭さが解消できれば使えるようになると思います。

では、プロトコルを解析してみましょう!(続く)

| | コメント (0)

2018.11.23

Amazonフルフィルメントに委託

日々の発送業務の負担を減らすため、特電の製品のうち汎用的な製品をAmazonに委託することにしました。

Amazonには、フルフィルメント・マルチチャネルというサービスがあります。Amazonの倉庫に商品を預けておいて、自社のショッピングカートで受注したものをAmazonが代行して発送してくれるようです。

自分のブログを読み返してみると、2012年にも実験していたようです。

以前はAmazon箱で発送されてしまっていたため顧客を驚かせていたのですが、最近では無地の箱で発送してくれるようになったそうです。

すごく久しぶりに使うのでやり方が間違っていないといいのですが、AmazonのセラーセントラルでFBAマルチチャネルに納品という手続きを経ると、バーコードが出てくるので、それを商品に貼り付けます。

Fba1

商品をまとめる外箱にもAmazonのバーコードを印刷して貼り付けます。

Amazonはこの黒い箱をピッキングして発送するので、カタログや案内などは製品箱の中に入れることにしました。

中に入れるものを間違えたり忘れたりすると取り返しがつかないので、いつもにも増して集中して、一つ一つまごころを込めて詰めていきます。

Fba2

コツとしては、入れ忘れがないかどうかは、全体の重さで見るとよいということがわかりました。

A4の紙1枚でも5グラムあるので、案内の紙を入れ忘れただけでも重さで判断できます。

sun

あとは注文が入ったらFBAの管理画面から住所を入力してぽちっとするだけです。

Fba3

自分のところから佐川急便やクロネコヤマトで発送するよりも、Amazonのほうが早く(お急ぎ便)、手数料を入れても運送料も安くなるのが、やはり数のパワーというやつを感じます。

これで、日々の事務作業のうち、商品発送という作業を外注することができるようになりました。

事務の省力化と自動化を目指す、勤労感謝の日でした。

| | コメント (0)

«MAX10のJTAG書き込みシーケンス