LPC1343 USBのソフトウェアコネクト (USB_CONNECT)

開発Listへ戻る

USBのH/W的な接続と、コンフィグレーションについて
ちょっと調べてみました。


最初は以下の回路で、単にDPをプルアップだけしていました。

これだけだと、PCにUSBを認識させるためのシーケンスが存在しました。

USB認識
 OK : LPC1343の電源投入→USBケーブル挿入
 NG : USBケーブルを挿入→LPC1343電源投入
    一度認識は成功した後、USBケーブル挿入状態でLPC1343リセット(RST端子)


USBケーブルを挿したままだと
プログラムを書き換えたりしてLPC1343をリセットすると認識が切れてしまいます。
再度認識させるにはUSBケーブルを抜き差ししなければならず
結構めんどくさかったので対策のために調べてみました。


1.USBの認識のしくみ

 どのようにUSBが認識されるのかはPICマイコンで有名な電子工作の実験室に
わかりやすく詳細な説明がありました。
(リンク:USBのプラグ&プレイとDescriptorの部分)

大まかに書くとこんな感じです。

PCサイドの動き
1)USBのプルアップを検出
2)100msウェイト
3)Reset 10ms(DPをLowにする)
4)コンフィグレーション動作

LPC1343の動き
PCサイドの4)までにMCU内部のリセット動作を終えて、
コンフィグレーションの指示を受けられるようにしておく。

これを見て認識がNGになる理由がわかりました。

USB認識 NG条件1 :USBケーブルを挿入→LPC1343電源投入
 理由: LPC1343の電源が立ち上がる前にPCサイドは4)の状態になっている。
  =3)のReset 10msをMCUが受けられずにNGとなる。
USB認識 NG条件2 :一度認識は成功した後、USBケーブル挿入状態でLPC1343リセット(RST端子)
 理由:PCサイドはUSBのプルアップを検出して認識動作を開始する。
    LPC1343をリセット(RST端子)する際に既に4)が完了しているので
    そもそも認識動作を行わない。
    また、LPC1343からみても10msのリセット期間がないために
    MCU内部リセットが出来ない。
    (実際 DPをPull upしたままだと、MCU動作はループに入っていることを確認した)

というわけで、LPCの電源が投入時やリセット時にはDPのプルアップを一度無効にするような
制御をすればよいだろうということがわかりました。

2.USB_CONNECT回路

DPのプルアップ制御については
USB接続部分のH/Wを修正すれば出来ます。
コードに関してはサンプルコード内に制御の記載が既に入っていますので
そのまま使えばよいようです。
(参考:以前のエントリ LPC1343 USB Virtual COM (USBシリアル変換 : Example pjt使用)


回路構成は
LPCのマニュアルに載っております。(最初は意味がわからなかったので無視していました)

USB_CONNECT端子でスイッチを制御してプルアップ状態にしたりしなかったりできます。
(LOWでプルアップ有効)

ここで、VBUSはUSBの5Vをぶち込みます。
そしてこれも必要です。
VBUSはUSBの5V電圧のレベルをチェックしていて、低くなるとUSB_CONNECTをHighにします。
(プルアップ無効)

なのでVBUSを接続していないとUSB_CONNECTもうまく動きません。

スイッチの回路については
LPC1343の開発ボードのようなものをwebで探し、
その回路情報から持ってきました。DTA114YKAという部品です。
参考の回路はIAR社のものです(リンク)

こんな感じで接続します。


(GNDのラインは切れているのではなく見づらくなるので割愛です)

これで、認識NGは回避されて
とっても便利にUSBが使えるようになりました!!

Scilab を使ってLPC1343とシリアル通信 & データ処理 ADCデータのリアルタイムデモ


1. ScilabでLPC1343のADC データをリアルタイム表示
(データに応じて円のサイズ変更)

開発Listへ戻る

フォトセンサーのデータの出力に応じて
scilabの円グラフの円のサイズをリアルタイムに
変更させるデモのようなものを作りました。

こんな感じです。

円のサイズが変わっています。
フォトセンサーの上に手をかざすと、出力が小さくなるのでそれに連動して
円のサイズが小さくなります。

画面がチラチラしています。
これはscilabのグラフを使っているためです(回避方法わからず・・)
scilabのグラフは通常、重ね書きをするので前のプロットが残ってしまいます。
それじゃあかっこ悪いので、前のプロットを消してから、新しいデータをプロットしています。
前のプロットを消して新しいプロットをするというコマンドがなく
消すというコマンドとプロットをするというコマンドを行っているために
チカチカ点滅してしまいます。

こんなもんなのかなぁ。。

LPC1343回路準備
以前のエントリを参照。
 2)回路&LPC1343準備編(2012.4.27)

Scilab プログラムフロー
今回は無限ループを使い、デモを終了する際には'Ctrl'キー+'C' キーで抜けるようにします。

1)準備: COM portを接続する (scilab コンソールで実施)

2)円グラフデモ関数実行
  2-1 円グラフ準備
  2-2 LPC1343にADCデータ取得指示 & Scilabがデータ取得(関数の中で実施)
  2-3 取得データ正規化 & 円データ変更
  2-4 グラフupdate (クリア+描写)
   2-2〜2-4は無限ループ

3)終了処理
'Ctrl'キー+'C' で終了
abortで標準レベルのプロンプトに戻る
COM portを閉じる


Scilab 関数 コード
プログラムフローの2)の部分のみです。

function ad0circle_r ()

// 1)円グラフ準備
t=0:0.01:2*%pi;
x=sin(t);
y=cos(t);
x2=x;
y2=y;

while 1 // 無限ループ

// 2)LPC1343のフォトトランジスタADCデータ取得
writeserial(h,"ad0"+ascii(13)+ascii(10)); // ad0 CR+LF送信
sleep(30); //30ms wait: LPC1343の動作時間 & 通信時間考慮
d=readserial(h); //シリアル受信データ取得
[d,endstr]=strtod(d); //char->int

//3)データの正規化
d=d/1023
x2=d*x;
y2=d*y;

// 4)グラフに表示する
clf; //clear glaph
plot2d(x2,y2,rect=[-1,-1,1,1],axesflag=0) // グラフ表示

end
endfunction

解説
関数の名前はad0circle_rにしました。

ほぼコメントどおりなのです。
グラフに表示する際に 'clf'で一度グラフを消してplot2dで再度描写するという形なので
デモがチラチラしています。

plot2dではrectでx,y軸のmin_maxを固定しています。
またaxesflag=0で軸の表示を消しています。

clfでグラフを消すと軸まで消えます、軸の部分のチラチラ感をなくそうということで
軸は消しました。


Scilab 関数実行

1)関数ファイルの作成
 Scilab コンソールでアプリケーションSciNoteを開き
 上の関数のコードをコピペします。
 そして、適当な場所に保存
 関数の名前.sciで保存します。先ほどの関数はad0circle_r でしたので
 ad0circle_r .sciで保存します。

2)実行の様子

 2-1)-->exec("macros/ad0circle_r.sci");
   関数を使えるようにする。
   execは絶対パス相対パスかでファイルの指定が必要です。
   相対パスの場合は現在のフォルダを
   コンソールの "ファイル→現在のディレトリを変更" で変更できます。

 2-2)-->h=openserial(1)
   COM portを開く。
   今回、私の場合はCOM1で通信する事だったので ()に'1'を入れてます。
   関数の中に入れていないのは、無限ループ&強制終了を使うデモなので
   COM port開く処理を入れてしまうと、COM portを正しく閉じることが出来ないためです。

 2-3)-->ad0circle_r()
   関数の実行
   別windowが出てきて、冒頭の動画のデモのができるようになります。
   無限ループです。

 2-4)-1->
   'Ctrl'キー+'C' で終了したときです。
   従来は-->で待ち受けているのに、-1->となっています。
   違うモードになっています。

 2-5)-->abort
   標準プロンプトに戻る。
   -1->から従来の-->に戻ります。

 2-6)-->closeserial(h)
   COM portを閉じます。

最近は新しい技術が非常に多くあるので
イチイチ説明を聞いて判断してくれる人が少なくなってきました。
百聞は一見にしかず!デモで理解してもらう必要性が高くなっています。
効果的でかつ簡単なデモの方法をこれからも調べて行きたいとおもいます。

Scilab を使ってLPC1343とシリアル通信 & データ処理 ADCデータのグラフ処理


1. ScilabでLPC1343のADC データ取得 (COMポート経由)
2. データのグラフ化
(リアルタイムではなく100データ保存後グラフ化)

開発Listへ戻る

実際にLPC1343とScilabをつなげて
フォトダイオードの出力をグラフ化します。

こんな感じで出力されます。

Scilab プログラム関数フロー
以下のようにします。リアルタイムでグラフ化するのではありません。

1)COM portを接続する
2)LPC1343のフォトトランジスタADCデータを100回取得し内部に保存する
3)グラフに表示する
4)COM portを閉じる

Scilab 関数 コード

function ad0glaph ()

// 1) COM portを接続する。
h=openserial(2); //COM2と接続 COM10以上はNGのようだ

// 2)LPC1343のフォトトランジスタADCデータを100回取得し内部に保存する
n=ones(100,2); // 100個のデータ格納変数作成
for k=1:100, // 100回データ取得
n(k,1)=k
writeserial(h,"ad0"+ascii(13)+ascii(10)); // ad0 CR+LF送信
sleep(30); //30ms wait: LPC1343の動作時間 & 通信時間考慮
x=readserial(h); //シリアル受信データ取得
[x,endstr]=strtod(x); //char->int
n(k,2)=x;
end;

// 3)グラフに表示する
plot(n(:,1),n(:,2)) // グラフ表示
set(gca(),'data_bounds',[0,0;100,1023]); //グラフ軸範囲
set(gca(),'tight_limits','on'); //グラフ軸固定化

// 4)COM portを閉じる
closeserial(h);

endfunction

コード解説 
ad0glaphという関数名にしました。
コードの中でほとんど説明してますが追加で説明すると

・LPC1343は 回路&LPC1343準備編 で説明したようにad0と受信することでADCを実行して結果を返します。
また改行コードはCR+LFなので以下のように記載しています。

writeserial(h,"ad0"+ascii(13)+ascii(10)); // ad0 CR+LF送信

・また何もしないとScilabのグラフでは軸のMin,Maxを自動調整します。
LPC1343のADCは10bitなのでY軸範囲をを0-1023に固定するようにしました。

set(gca(),'data_bounds',[0,0;100,1023]); //グラフ軸範囲
set(gca(),'tight_limits','on'); //グラフ軸固定化

Scilab 関数 コード実行

1)関数ファイルの作成
 Scilab コンソールでアプリケーションSciNoteを開き
 上の関数のコードをコピペします。
 そして、適当な場所に保存
関数の名前.sciで保存します。先ほどの関数はad0glaphでしたので
ad0glaph.sciで保存します。

2)関数を使えるようにする。
 .sciを作っただけでは関数は使えるようになりません。
execで定義してやらねばなりません。

3)execで定義後は ad0glaph()で実行することができ
 冒頭のグラフがでてきます。

実行の様子です。(funcprot(0)は下の説明参照)

その他
・execは絶対パス相対パスかでファイルの指定が必要です。
相対パスの場合は現在のフォルダを
コンソールの "ファイル→現在のディレトリを変更" で変更できます。

・funcprot(0) :
execを一度実行した後でスクリプトを修正した場合、
もう一度execを実行する必要があるのですが、エラーが起きます。
funcprot(0)を入れるとexecが実行できるようになります。


これで、LPC1343で取得したデータを可視化することが出来ました。
scilab内でシュミレーションすることもできます。
取得したデータからアルゴリズム開発などをMCUコーディングで
カットアンドトライするよりも
シミュレーションの方が効率的な場合も多いはずです。





 

Scilab を使ってLPC1343とシリアル通信 & データ処理 回路&LPC1343準備編

開発Listへ戻る


回路+LPC1343のコードの準備です。


回路

回路は以前のエントリ 「LPC1343 ADC データ測定 リアルタイムグラフ表示」と同じで
フォトダイオードを使います。

フォトダイオードの出力をAD0でAD変換します。
変換結果はUSB-シリアル変換 FT232RLを使ってPCへ転送します。

準備物
 FT232RL USBシリアル変換モジュール
 フォトダイオードS9648-100 秋月電子 120円
 このフォトダイオードはアンプも不要で大きな出力が出たのでちょうど良かったです。

接続図
 



コード


Hyper terminal やTera termなどの通信ソフトで
ad0 と LPC1343に送信すると ADコンバート処理をして結果を返すというものです。

以下のエントリをベースに行います。

どのような動きをするものなのかは以下を参照
  動作結果、接続図(2012.2.18)
コードの構成および概略の動作は以下エントリを参照。
  コード(2012.2.18)


実際のコードは下に残します。
以前のエントリからの差は
main.cでHello worldを削除
uart.cでローカルエコー削除とCRで改行→CR+LFで改行としています。(受信部)

main.c

#ifdef __USE_CMSIS
#include "LPC13xx.h"
#endif

#include
#include
#include "adc0.h"
#include "uart.h"

__CRP const unsigned int CRP_WORD = CRP_NO_CRP ;

#include
#include    //int-> char変換 itoi
// Main loop
int main(void) {
// Variable declaration
char line[40]; // Line buffer;
char *s; // return value
char p[4]; // AD0 value
int ad0data;

// Initialize UART
uart_init(9600);
// uart_puts("HELLO WORLD\r\n");
adc0_init();

// Enter an infinite loop, just echo lines
while (1) {
// Get a line from UART
s = uart_gets(line, sizeof line);
if (s) {
// Put a line into UART if valid
if(!strcmp(s,"ad0")){
ad0data=adc0read();
itoa(ad0data, p, 10);
uart_puts(p);
uart_puts("\r\n");
}
else{
uart_puts("na");
uart_puts("\r\n");
}

}
}
}

uart.c
CR+LFで改行として使ってます。

#ifdef __USE_CMSIS
#include "LPC13xx.h"
#endif

#include
#include
#include "uart.h"



////
// Flag mask for UART_LSR register.
const uint32_t LSR_THRE = 0x20;
const uint32_t LSR_RDR = 0x01;

// Initialize UART module with specified baud-rate
void uart_init(uint32_t baudrate) {
// Divisor ratio
uint32_t Fdiv;

// Configure P1[7] as TXD output.
LPC_IOCON->PIO1_7 &= ~0x07; // FUNC=000 (GPIO)
LPC_IOCON->PIO1_7 |= 0x01; // FUNC=001 (TXD)

// Configure P1[6] as RXD input.
LPC_IOCON->PIO1_6 &= ~0x07; // FUNC=000 (GPIO)
LPC_IOCON->PIO1_6 |= 0x01; // FUNC=001 (RXD)

// Enable UART clock
LPC_SYSCON->SYSAHBCLKCTRL |= (1<<12); // UART=1

// Enable UART peripheral clock
LPC_SYSCON->UARTCLKDIV = 0x01; // DIV=1

// Calculate baud rate divisor
Fdiv = (
SystemCoreClock // System clock frequency
* LPC_SYSCON->SYSAHBCLKDIV // AHB clock divider
) / (
LPC_SYSCON->UARTCLKDIV // UART clock divider
* 16 * baudrate // baud rate clock
);

// Set the baud rate divisor value
LPC_UART->LCR |= 0x80;
LPC_UART->DLM = Fdiv / 256;
LPC_UART->DLL = Fdiv % 256;
LPC_UART->LCR &= ~0x80;


// Configure UART module as
// 8 bit, 1 stop bit, no parity
// Enable and reset TX and RX FIFO.
LPC_UART->LCR = 0x03;
LPC_UART->FCR = 0x07;
}

// send a character via TXD
void uart_putc(const char c) {
// Wait for TX buffer empty
while (!(LPC_UART->LSR & LSR_THRE));
// Put a character
LPC_UART->THR = c;
}

// send a string via TXD
int uart_puts(const char *s) {
int n;
for (n = 0; *s; s++, n++) {
uart_putc(*s);
}
return n;
}

// receive a character via RXD
int uart_getc(void) {
// Wait for RX buffer valid
while (!(LPC_UART->LSR & LSR_RDR));
return LPC_UART->RBR;
}

// receive a string via RXD
char *uart_gets(char * const buf, const int size) {
int ch;
int n = 0;

while (n < size - 1) {
ch = uart_getc();
if (ch == '\n') { // LFでブレイク
// detected end of line
// uart_puts("\r\n"); ローカルエコー削除
break;
}
else if(ch!='\r'){ //CRでバッファ更新なし
// uart_putc(ch);   ローカルエコー削除
buf[n++] = ch;
}
}
buf[n] = 0;
return buf;
}

adc0.c

#include "LPC13xx.h" /* LPC13xx Peripheral Registers */
#include "adc0.h"


void adc0_init(void) {
LPC_SYSCON->PDRUNCFG &= ~(0x1<<4); // See data sheet
LPC_SYSCON->SYSAHBCLKCTRL |= (0x1<<13); // See data sheet
LPC_IOCON->JTAG_TDI_PIO0_11 &= ~0x9F; // PIO0_11=Analog input
LPC_IOCON->JTAG_TDI_PIO0_11 |= 0x02; // PIO0_11=ADC0

LPC_ADC->CR |=0x00000001; // ADC0=on
//Clkdiv This time clk=4MHz (max=4.5MHz)
LPC_ADC->CR = ((SystemCoreClock/LPC_SYSCON->SYSAHBCLKDIV)/4000000-1)<<8;

return;
}

int adc0read(void){

int data;

LPC_ADC->CR |=0x01000000; //ADC Start now
while(!(LPC_ADC->DR0 & 0x80000000) );

data=((LPC_ADC->DR0 & 0x0000FFC0)>>6);
LPC_ADC->CR &= 0xF8FFFFFF; //stop ADC now

return(data);
}

uart.h

#ifndef UART_H_
#define UART_H_

extern void uart_init(uint32_t baudrate);
extern void uart_putc(const char c);
extern int uart_puts(const char *s);
extern int uart_getc(void) ;
extern char *uart_gets(char * const buf, const int size);

#endif /* UART_H_ */

adc0.h

#ifndef ADC0_H_
#define ADC0_H_

extern void adc0_init(void);
extern int adc0read(void);

#endif /* ADC0_H_ */

Scilab を使ってLPC1343とシリアル通信 & データ処理 Scilab 準備編


1. Scilab インストール(たいしたことじゃないですが・・)
2. Serial tool box インストール
3. COM portとの接続確認

開発Listへ戻る

 最近、次は何をしようかな〜なんて考えてました。

本ブログは(後から変わるかもしれませんが)
-私個人の業務で役立つことの先取り。
-でも業務機密には触れない(当然)
ということなんで、あまり自分の業務に深く入ったことは出来ず。。
次は何をするか迷ってました。

で、決めたのが数値計算ソフトで有名な"Matlab" の
フリー版であるScilabを使おうということです。

LPC1343からデータを取り出して、PCの計算ソフトで
ぱぱっと処理するというコンセプトです。


今回は準備

1)Scilab本体インストール
Scilabユーザーグループ in Japanから入手できます。
Scilabとは→"ダウンロードはこちらからどうぞ"のリンクから
5.3.3のバージョンが入手可能です(2012.4.23現在)

インストールは特に難しくなく、指示通りだったと思います。

2)Serial tool boxインストール
Scilabを立ち上げて
 アプリケーション(A)→モジュール管理
を選択します。

Data handlingを選択して Serial communication toolboxを選択します。

右のwindowにインストールとか出てきますので
インストール押します。(ネット環境必要)

これでOK

再起動すると下の図のように
Starting the Serial Toolbox
Load macros
Load help
と出てきます。
(今回使用した図は、Serial toolboxインストール後にとったものなので
ちょっと違うかもしれません)

またSerial toolboxのインストール時の英語の説明をつらつらと読んでみると
Version 5.4に対応みたいなことが書いてあります。
どうやら英語の最新版は5.4なんでしょうね。
日本語版は5.3.3です。
でもまぁインストールして確認したら通信できたんで良いです。



3)COM portとの接続確認
今回はCOM portのオープン確認だけです。
h=openserial(COMportナンバー) で確認できます。

試したところ10より小さいかもしくは10以下のポート番号が必要なようです。
FTDIのUSB-Serialを使ってPCに接続したところCOM11でした。
その場合はNG
COM2に変更したらOKになりました。

COM11 NG COM2 OKの図

Port変更方法
バイスマネージャでCOMportのプロパティから変更します。

今日はココまで!

LPC1343 フォトダイオード出力をAD変換 - USBでPCへデータ転送 - リアルタイムグラフ表示


1. フォトダイオードのアナログ出力をADCで10ms毎に取得
2. USB virtual comで取得データをPCに送信
3. フリーソフトCPLTでデータログ&ほぼリアルタイムグラフ表示

開発Listへ戻る

以前のエントリ
LPC1343 ADC データ測定 リアルタイムグラフ表示(2012.4.2)

LPC1343 USB virtual COMでローカルエコー(2012.3.24)
を組み合わせただけです。


接続図


USB接続してTeratermにつなげると下のようにADCの値がばばばっと出てきます。

で、CPLT(以前のエントリ参照)につなげると
リアルタイムでデータがグラフ表示されます。
携帯電話の画面をフォトセンサに向け、明るくしたところが見て取れます。


コードです。
以下のエントリを順番にやっていって、3)の状態をベースにします。
 1)LPC1343 USB Virtual COM (USBシリアル変換 : Example pjt使用)(2012.3.11)
 2)LPC1343 USB Virtual COMをカスタマイズ!(2012.3.13)
 3)LPC1343 USB virtual COMでローカルエコー(2012.3.24)
追加分と、修正が入ったmain関数のみ記載します。

はっきり言って無駄がありますが、まぁいいかなと思ってます。

//追加分//
#include "adc0.h"
#include
#include

//修正分//
int main (void) {
GETDAT_T Getdata,adcdata;  // 構造体 adcdataを使用
Getdata.num=0;
int ad0data;          // ad0のdata用変数

LPC_SYSCON->SYSAHBCLKCTRL |= (EN_TIMER32_1 | EN_IOCON | EN_USBREG);
adc0_init();

LPC_SYSCON->SYSAHBCLKCTRL |=0x100; // Timer16B1 Turn ON
LPC_TMR16B1->PR = 7200-1; // 10kHz (Max 16bit dec:65535)
LPC_TMR16B1->MR0 = 100; // 0.01S
LPC_TMR16B1->MCR = 0x04; // Stop timer on MR0

USBIOClkConfig();

VCOM_Init(); // VCOM Initialization

USB_Init(); // USB Initialization
USB_Connect(TRUE); // USB Connect

while (!USB_Configuration) ; // wait until USB is configured

while (1) { // Loop forever
LPC_TMR16B1->TCR = 0x02; // TCR Reset
LPC_TMR16B1->TCR = 1; // TCR Start

ad0data=adc0read(); // get ADC data
itoa(ad0data,adcdata.d, 10);//adcdataをcharに変換
strcat(adcdata.d,"\r\n"); //改行コードを付加
adcdata.num=strlen(adcdata.d); //文字数を計算

VCOM_Serial2Usb(adcdata); // USBで送信
Getdata.num=0; //面倒だからそのまま
VCOM_CheckSerialState(); //よくわからないからexampleコードのまま
Getdata=VCOM_Usb2Serial();//面倒だし良くわからないからそのまま
while (LPC_TMR16B1->TCR & 0x01); //10ms経つまでwait
} // end while
} // end main ()


コード解説 

・まずインクルードです。
 以前のエントリ LPC1343 UARTでADCを制御する 2/2を参照です。
 adc0.c, adc0.hはリンク先からコピーしてプロジェクトに追加してください。

#include "adc0.h"

今回, itoa,strlen関数を利用するので以下もインクルードです。
#include
#include

その他は大体コメントのとおりです。
ADCに関しては List記事からADC関連の記事を見てください。
開発List

USB関連はまだわからないのでとりあえずexampleコードのまま使ってます。

LPCexpresso IDE 使い方メモ2  ROM焼き (FlashへのFileダウンロード)

今までイチイチROM焼き(FlashへCompileしたFileをダウンロード)する時は
Debugボタンから行っていたのですが

最近webでROM焼きのみできる方法を見つけました。(コチラのサイト)


やり方

Project内のBinariesのなかに.axfというFileがあり
そのFileを右クリック
Binary Utilities からProgram Flashを選択します。


するとProgram Flashというアプリケーションが立ち上がります。
通常そのままOKを押せば書いてくれます。

書き込んだ後は一度USBを抜き差ししてリセットする必要があるようです。



また、ROM焼き機能だけをもったS/Wがないものかと探しましたが
Yahoo groupsでの関連記事を見つけたところによると
LPCxpresso関連では、そのようなものが出ていないようです。

そうなると、他のPCで書き込みだけしたいといった時、
他の人間にこのProgram焼きこんで使ってみて!とかいう時
イチイチ、他のPCにIDEを入れなければならないわけで、登録とかしなければいけないわけで
面倒なことです。
(無料で環境を作ってもらっておきながらも欲望は尽きません)

なお、他のPCにIDEをインストールした場合に
axfだけでROM焼きをするには
いちどターゲットのMCUでダミーのProjectを作って
Pjtの中にaxfファイルをドラッグアンドドロップして
右クリック→Binary Utilities ....で書き込むことが出来ました。