지돌이의 블로그 입니다!

데이터 쉬트 : http://www.semtech.com/images/datasheet/sx1276_77_78_79.pdf


여러 정보들...


p.10



p.84



p.25

Bandwidth가 작으면 크리스탈의 정밀도로는 사용이 힘든가 봅니다.

저는 SX1276모듈을 직구로 구매해논 상태이고

NT3225SA이란 TCXO(32MHz, +-2.5ppm, clipped sine wave?)또한 구매해논 상태입니다.

배송되려면 2주는 걸리겠네요...ㅠㅠ


p. 27


4.1.1.2. 확산 인자

확산 스펙트럼 LoRaTM 변조는 다수의 정보 칩에 의해 페이로드 정보의 각 비트를 표현함으로써 수행된다. 확산 정보가 전송되는 속도는 심볼 레이트 (Rs)로 지칭되고, 공칭 심볼 레이트와 칩 레이트 사이의 비율은 확산 인자이며, 정보 비트 당 전송 된 심볼의 수를 나타낸다.


확산 계수, SpreadingFactor는 서로 다른 확산 인자가 서로 직교하기 때문에 링크의 송신 측과 수신 측에서 미리 알려 져야합니다. 수신기 입력에서 필요한 결과 신호 대 잡음비 (SNR)도 참고하십시오. LoRa 수신기의 감도를 높이는 네거티브 SNR (즉, 링크 예산 및 범위)을 갖는 신호를 수신하는 기능입니다


* Chips/symbol이 뭔지 몰라서 찾아봤는데 좋은 자료가 있네요.

http://www.ktword.co.kr/abbr_view.php?m_temp1=2337


Chips / symbol이 높을 수록 SNR이 좋아지는데

1개의 심볼(1개의 데이터? bit?)을 구성하는 chip(변화하는 파형)이 많으니 더 노이즈에 강해지게 됩니다.


ADC나 DAC의 resolution과 비슷한거 같습니다,


예를 들어

0 -> 0

1 -> 10

2 -> 20

3 -> 30

이렇게 변환된다고 할 때

2란 값을 20으로 변조시켜서 전송할 때 중간에 노이즈가 껴서 13이란 값이 수신되어도 2일 확률이 놓습니다.


그런데

0 -> 0

1 -> 5

2 -> 10

3 -> 15

이렇게 변환된다면

2란 값을 10으로 변조시켜서 전송할 때 중간에 노이즈가 껴서 13이 수신되면 2인지 3인지 불확실해 집니다.


뭐... 대충 이런 비유로...^^



p.28

신호 대역폭이 증가하면 더 높은 유효 데이터 전송률을 사용할 수 있으므로 전송 시간이 줄어들어 감도가 향상됩니다. 물론 대부분의 국가에서 허용되는 점유 대역폭에 대한 규제가 있습니다. 단일 측 파대 대역폭의 관점에서 설명 된 FSK 모뎀과 달리, LoRaTM 모뎀 대역폭은 양측 대역폭 (또는 전체 채널 대역폭)을 의미합니다. 대부분의 규제 상황과 관련된 대역폭의 범위는 LoRa ™ 모뎀 사양 표 (2.5.5 절 참조)에 나와 있습니다.



LoRa 통신에 관한것

p.114


우선

* RegSyncWord

SX1276에 FSK모드일 경우 SyncWord는 최대 8bytes인데 LoRa모드일 경우 1byte의 SyncWord을 지원한다.

0x34는 LoRaWAN Network용으로 예약되어 있으니

LoRaWAN규격을 사용하려면 0x34로 설정하고 다른 프로토콜을 사용하려면 다른 값을 사용하면 된다.

(SyncWord가 정해진 값과 일치해야만 데이터를 수신한다.)



SZ1276제어를 위한 MCU필요 조건

http://www.semtech.com/images/datasheet/an1200_28_lorawan_mcu_specification_v2.pdf

LoRaWAN이라고 써져 있지만 쨋든 LoRa을 사용하려면

DIO0과 DIO1을 MCU의 IRQ포트에 연결해야 한다.(? 이거 없음 안되나...?)

DIO0 : TxDone, RxDone

DIO1 : RxTimeout

Datasheet p.69을 참고하길 바란다...

뭐.. 이런 부분은 나중에 차차 알아갈 예정이다..



추가 관련 자료들

http://www.semtech.com/wireless-rf/rf-transceivers/sx1276/

LoRa Calculator Tool을 이용하면 SF, BW, payload length등을 통해 데이터 전송시 Time on air와 Sensitivity 등을 알 수 있다.



갈길이 멀다....ㅠㅠ 빨리 산넘고 바다건너 SX1276과 STM32모듈이 오길...

'임베디드기기 > LoRa 통신' 카테고리의 다른 글

[LoRa] SX1276 여러 정보 #1  (0) 2017.01.02
[LoRa] LoRa Packet Structure  (0) 2016.12.30

Comment +0

데이터 쉬트 : http://www.semtech.com/images/datasheet/sx1276_77_78_79.pdf

Page. 29,

4.1.1.6. LoRa(TM) Packet Structure


(우선.. 번역은 구글 번역기이다...ㅋㅋ

얼마 전? 몇주 전부터 구글번역기에 인공신경망을 이용한 번역엔진이 적용되어 꽤 유연한 번역이 가능하다.

참고로 파파고가 PC에서 안되는게 흠이지만 모바일에서는 파파고가 최고!ㅋㅋ)




* Preamble

뭐라뭐라 영어가 길다...

별거 없고 그냥 PreambleLength는 6~65535까지 설정 가능한데 전체 PreambleLength는 여기에 +4심볼 한 거란다.


줄친 부분이 중요한데,

수신기는 정기적으로 다시 시작하는 프리앰블 감지 프로세스를 수행하기 때문에 PreambleLength는 송수신기 모두 같아야 한다.

PreambleLength가 알려지지 않거나 변경 될 수있는 경우, 최대 프리앰블 길이는 수신 측에서 프로그래밍되어야한다.

이런 말이다.




* Header

Depending upon the chosen mode of operation two types of header are available. The header type is selected by the ImplicitHeaderModeOn bit found within the RegModemConfig1 register.


헤더... 2가지 모드가 있는데

RegModemConfig1레지스터에 있는 ImplicitHeaderModeOn비트로 설정 할 수 있단다.


* Explicit Header Mode

This is the default mode of operation. Here the header provides information on the payload, namely:

 - The payload length in bytes.

 - The forward error correction code rate

 - The presence of an optional 16-bits CRC for the payload.


* 명시적헤더모드(기본)

 - payload길이는 bytes단위이다.

 - "정방향 오류 정정 부호율" 이라는데.. 그런가보다..

 - payload에 대한 선택적(RxPayloadCrcOn등 으로 CRC을 사용할건지 선택 가능)16-bits CRC가 있다.


The header is transmitted with maximum error correction code (4/8). It also has its own CRC to allow the receiver to discard invalid headers.

헤더는 최대 오류 수정 코드 (4/8)로 전송됩니다. 또한 수신자가 유효하지 않은 헤더를 버릴 수 있도록 자체 CRC가 있습니다.

(4/8 이란건 뭔지 모르겠다... ECC알고리즘 관련된거 같은데..음...

8bit데이터 + 4bit ECC란 건가??)


* Implicit Header Mode

* 암시적헤더모드

또 영어가 길다...

결론만 말하면 이건 그냥 기본 헤더 없이 사용자가 raw으로 데이터를 보내는 것이다.

CRC계산 그런거 안해서 더 빠르단다.

SF = 6을 선택하면 이 모드만 가능하단다.




* Low Data Rate Optimization

LowDataRateOptimize 설정이란게 있는데 (자세한건 읽어보면 되고)

심볼 지속 시간이 16ms이상이면 의무적으로 사용해야 한단다.



일단... 여러 수식이 있다


 

Rs:LoRa symbol rate, BW:Bandwidth(Hz), SF:Spreading Factor



- PL is the number of Payload bytes (1 to 255)

- SF is the spreading factor (6 to 12)

- IH=0 when the header is enabled, IH=1 when no header is present

- DE=1 when LowDataRateOptimize=1, DE=0 otherwise

- CR is the coding rate (1 corresponding to 4/5, 4 to 4/8)







* 주파수 호핑 (FHSS)

RegHopPeriod레지스터에서 FreqGoppingPeriod을 0이 아닌 값으로 설정하면 주파수 호핑이 작동한다.

프리앰블과 헤더는 항상 0번 채널을 통해 전달되고 그 이후 주파수 호핑을 한다.

HoppingPeriod = Ts * FreqHoppingPeriod





오늘은 여기까지..

다행이 SX1276이 꼭 LoRaWAN Protocol을 써야하는건 아닌가보다.


SX1276+STM32 을 이용해 IoT통신장치, SX1276+RaspberryPi 을 이용해 IPv6-LoRa Gateway을 만들 계획이다.

EUI-64처럼 임의로 64bit Device MAC 을 저장해놓고

IPv6 Stack을 만들어서 통신하도록 할 것이다.

'임베디드기기 > LoRa 통신' 카테고리의 다른 글

[LoRa] SX1276 여러 정보 #1  (0) 2017.01.02
[LoRa] LoRa Packet Structure  (0) 2016.12.30

Comment +0

라즈베리파이의 오디오 출력은 PWM신호에다가 RC LPF-Filter을 거쳐서 출력됩니다.


(위 사진은 Raspberry B+ 버전부터의 오디오 출력 회로입니다. 이전 버전에서는 전압분압부분과 버퍼가 없습니다.)

라즈베리파이의 음질이 좋지 않다는 것은 많은 분들이 이미 알고 있습니다.

사운드 전용 Chip이나 DAC가 있는 것이 아니니 음질이 좋길 바랄 수는 없겠지요..


그런데 D-Class앰프도 PWM을 이용하여 소리를 출력합니다.

D-Class앰프는 음질이 좋은 편이죠.


우선 D-Class앰프는 오디오 신호에 삼각파를 이용해 PWM을 합니다.

만들어진 PWM신호로 FET등을 스위칭해 큰 진폭을 갖는 PWM신호로 만든다음 20kHz LPF LC-Filter을 통해 스피커로 소리를 출력하는 원리입니다.

(빨간색이 원본 오디오 신호, 초록색이 삼각파, 파랑색이 PWM된 신호입니다.)

(C언어로 알고리즘을 만들어 시뮬레이션을 한 결과입니다.)


그래서 저는 D-Class 앰프의 원리를 라즈베리파이에도 적용시켜보려고 합니다.


이걸 하려면 오디오쪽 커널 소스와 오디오 출력 회로를 모두 바꿔야 합니다.


위 회로는 간단하게 구성도를 그려본 것입니다.

47uH / 560nF 의 LC-Filter으로 31 kHz LPF을 구성하였으며

공진때문에 덤핑저항 10옴을 넣어 주었습니다.


그런데 적절한 주파수에 적당히 작은 크기로 하려면 덤핑저항이 계속 커집니다...

제가 능력이 없어서 그런 것이겠지만 덤핑저항을 10옴 넘게 만들기가 힘들더군요...


쨋든 라즈베리파이 PWM ---> 전압분압&버퍼 ---> LC LPF ---> 버퍼 ---> 출력

이런식으로 구성해야겠습니다.


라즈베리파이 커널소스를 찾아보며 소스를 수정해 다시 올리고 회로를 구성해 봐야겠네요.

Comment +0

저는 아두이노 라이브러리가 너무 편해서 안씁니다...ㅋㅋ


AVR을 Native하게 만지던 사람은 아마 공감할..듯?


하지만 그런 저도 아두이노 보드와 부트로더는 사용한답니다. 편해서...ㅋㅋ

그냥 땜질만 하면 작동하고 USB-Uart보드랑 아두이노 보드랑 연결하면 바로 업로드도 가능하니까요..ㅎ


avrdude.zip

이 파일은 avrdude을 아두이노부트로더도 사용 가능하게 만든건데

인터넷 어딘가에서 다운받은거 같긴 한데 기억이 안나네요..ㅎ



사용법은 간단합니다.


avrdude -carduino -pm328p -U flash:w:Firmware.hex -v -v -v -PCOM5 -b57600


굵은 색으로 칠한것만 본인에 환경에 맞게 바꾸시면 됩니다.


m328p는 아두이노프로미니 (atmega328p) 설정이구요

Firmware.hex는 업로드할 펌웨어 파일이름을 쓰시면 됩니다.

COM5는 Serial포트 번호이구

57600은 아마 공통(?)일 겁니다.

Comment +0

2015.04.06. 21:41



실패 #1


https://github.com/allwinner-zh/linux-3.4-sunxi


여기 커널 소스를 gcc-linaro-arm-linux-gnueabihf-4.8-2014.04_linux 툴체인을 통해 컴파일을 하였습니다.


make ARCH=arm sun8iw5p1smp_defconfig 이렇게 초기 설정을 해주고...

(참고로 H3은 sun8iw7p1입니다. 그나마 저게 비슷해서...)


그런데 

arm-linux-gnueabihf-gcc: error: unrecognized command line option ‘--min_array_alignment=4’

arm-linux-gnueabihf-gcc: error: unrecognized command line option ‘--no_unaligned_access’

이런 오류가 나네요... 컴파일러 문제인가 봅니다.


일단 arch/arm/mach-sunxi/power/brom/Makefile 에서 저 두개를 빼니 되긴 되네요...


그리고...

gen_check_code 가 없다고 나옵니다... pc-tools 가 빠졌다고 github에 나오는데

gen_check_code.exe을 다운받아서 수동으로 resumes.code을 생성합니다.

https://github.com/cubieboard/a20-boot/blob/master/workspace/pctools/gen_check_code.exe



SPI을 체크하면 오류가 나네요..ㅠㅠ

온도센서부분도 수정해야 하구...


아... 지금까지 이 커널 결국 안되는건가? 생각이 들어 포기할까? 생각이 몇십번은 드네요...

아... ipv6도 안되네요.


make ARCH=arm uImage


uImage load address = 0x40008000


아... 커널 실행하자마자 뻗네요..ㅠㅠ


Orange Pi 측에 메일을 보내도 답장은 없구...ㅜㅜ

아.. 어케하죠??ㅠㅠ

누구 Allwinner H3 (sun7iwp1) 커널 없나요~~~~~~




실패 #2


linux-3.19.3 커널도 실패...

Starting kernel ... 에서 멈춤...ㅠㅠ

Comment +0

2015.04.03. 20:11



데이터 쉬트

http://dl.linux-sunxi.org/H3/Allwinner_H3_Datasheet_V1.0.pdf


Allwinner 제품정보

http://www.allwinnertech.com/en/clq/H_series/501.html



커널은 ...ㅠㅠ



*** kernel.org 에서 제공하는 커널 (3.19.3 확인) 은 sun8i을 지원하는 모양입니다.

한번 이걸루 컴파일 해볼려구요~ 

... axp power supply 드라이버가 없어서... 해메다가

https://github.com/allwinner-zh/linux-3.4-sunxi 이걸 발견했습니다!

한번 try...

Comment +0

2015.04.01. 22:16




SD카드에 PhoenixCard으로 이미지를 굽고, SD카드를 분석하면서 Allwinner H3의 부팅 메커니즘을 어느정도 알아내었습니다.

(아... 구조가 왜이렇게 난해하게 되어있는지...ㅠㅠ 노가다로 분석해야 되네요. 정보도 없구...)


우선 MBR은 다 지우고 테스트했습니다. 파티션이 하나도 없단 뜻이죠.


분석한 바로는 부트로더가 2부분으로 나뉘어져 있습니다.


16 ~ 79섹터 (64개) : bootloader1

38192 ~ 39951섹터 (1760개) : u-boot (bootloader2)


우선 bootloader1만 SD카드에 있을때 부팅로그입니다.

HELLO! BOOT0 is starting!

boot0 version : 4.0.0

fel_flag = 0x00000000

rtc[0] value = 0x00000000

rtc[1] value = 0x00000000

rtc[2] value = 0x00000000

rtc[3] value = 0x00000000

rtc[4] value = 0x00000000

rtc[5] value = 0x00000000

rtc[6] value = 0x00000000

rtc[7] value = 0x00000000

DRAM DRIVE INFO: V0.8

DRAM Type = 3 (2:DDR2,3:DDR3,6:LPDDR2,7:LPDDR3)

DRAM CLK = 672 MHz

DRAM zq value: 003b3bfb

READ DQS LCDL = 001f1e1f

DRAM SIZE =1024 M

odt delay

dram size =1024

card boot number = 0

card no is 0

sdcard 0 line count 4

[mmc]: mmc driver ver 2014-12-10 21:20:39

[mmc]: ***Try SD card 0***

[mmc]: SD/MMC Card: 4bit, capacity: 7639MB

[mmc]: vendor: Man 00284245 Snr 0000007c

[mmc]: product:

[mmc]: revision: 0.2

[mmc]: ***SD/MMC 0 init OK!!!***

sdcard 0 init ok

ERROR! NOT find the head of uboot.

ERROR! NOT find the head of uboot.

read all u-boot blk failed

Ready to disable icache.

read all u-boot blk failed 라고 나오고 더이상 부팅이 안되는걸 보니 u-boot을 읽어오는데 실패한것으로 보입니다.


bootloader 1+2 모두 SD카드에 있을 때

HELLO! BOOT0 is starting!

boot0 version : 4.0.0

fel_flag = 0x00000000

rtc[0] value = 0x00000000

rtc[1] value = 0x00000000

rtc[2] value = 0x00000000

rtc[3] value = 0x00000000

rtc[4] value = 0x00000000

rtc[5] value = 0x00000000

rtc[6] value = 0x00000000

rtc[7] value = 0x00000000

DRAM DRIVE INFO: V0.8

DRAM Type = 3 (2:DDR2,3:DDR3,6:LPDDR2,7:LPDDR3)

DRAM CLK = 672 MHz

DRAM zq value: 003b3bfb

READ DQS LCDL = 001f1e1f

DRAM SIZE =1024 M

odt delay

dram size =1024

card boot number = 0

card no is 0

sdcard 0 line count 4

[mmc]: mmc driver ver 2014-12-10 21:20:39

[mmc]: ***Try SD card 0***

[mmc]: SD/MMC Card: 4bit, capacity: 7639MB

[mmc]: vendor: Man 00284245 Snr 0000007c

[mmc]: product:

[mmc]: revision: 0.2

[mmc]: ***SD/MMC 0 init OK!!!***

sdcard 0 init ok

ERROR! NOT find the head of uboot.

The size of uboot is 000dc000.

sum=f4220f4d

src_sum=f4220f4d

Succeed in loading uboot from sdmmc flash.

Ready to disable icache.

Jump to secend Boot.

SUNXI_NORMAL_MODE

[      0.348]e mode


U-Boot 2011.09-rc1 (Mar 13 2015 - 12:54:51) Allwinner Technology


[      0.356]version: 1.1.0

normal mode

[      0.363]pmbus:   ready

not set main pmu id

axp_probe error

[      0.378]PMU: pll1 1200 Mhz,PLL6=600 Mhz

AXI=400 Mhz,AHB=200 Mhz, APB1=100 Mhz

sid read already

fel key new mode

run key detect

no key found

no key input

dram_para_set start

dram_para_set end

normal mode

[      0.408]DRAM:  1 GiB

relocation Offset is: 35af9000

[box standby] read rtc = 0x0

[box_start_os] mag be start_type no use

user_gpio config

user_gpio ok

gic: normal or no secure os mode

workmode = 0

MMC:     0

[      0.482][mmc]: mmc driver ver 2014-12-10 9:23:00

[      0.487][mmc]: get sdc_phy_wipe fail.

[      0.491][mmc]: get sdc0 sdc_erase fail.

[      0.495][mmc]: get sdc_f_max fail,use default 50000000Hz

[      0.500][mmc]: get sdc_ex_dly_used fail,use default dly

[      0.506][mmc]: SUNXI SD/MMC: 0

[      0.519][mmc]: *Try SD card 0*

[      0.552][mmc]: CID 0x28424520 0x20202020 0x2000000 0x7c00f2ed

[      0.557][mmc]: mmc clk 50000000

[      0.561][mmc]: SD/MMC Card: 4bit, capacity: 7639MB

[      0.565][mmc]: boot0 capacity: 0KB,boot1 capacity: 0KB

[      0.571][mmc]: ***SD/MMC 0 init OK!!!***

[      0.575][mmc]: erase_grp_size:0x1WrBlk * 0x200 = 0x200 Byte

[      0.581][mmc]: secure_feature 0x0

[      0.584][mmc]: secure_removal_type  0x0

[      0.588]sunxi flash init ok

script config pll_de to 864 Mhz

Not Found clk pll_video1 in script

script config pll_video to 297 Mhz

[boot]disp_init_tv

[DISP_TV] disp_init_tv enter g_tv_used

screen 0 do not support TV TYPE!

[BOOOT_DISP_TV] disp tv device_registered

unable to find regulator vcc-hdmi-18 from [pmu1_regu] or [pmu2_regu]

enable power vcc-hdmi-18, ret=-1

DRV_DISP_Init end

boot_disp.auto_hpd=1

auto hpd check has 50 times!

[disk_read_fs] no the partition

error: open disp_rsl.fex, maybe it is not exist

attched ok, mgr1<-->device1, type=2, mode=11----

ready to set mode

disp_tv_enable

[      1.429]finally, output_type=0x2, output_mode=0xb, screen_id=0x1, disp_para=0x20b0000

fail to find part named env

Using default environment


In:    serial

Out:   serial

Err:   serial

--------fastboot partitions--------

mbr not exist

base bootcmd=run setargs_nand boot_normal

bootcmd set setargs_mmc

key 0

cant find rcvy value

cant find fstbt value

no misc partition is found

to be run cmd=run setargs_mmc boot_normal

[      1.466][mmc]: MMC Device 2 not found

[      1.470][mmc]: Can not find mmc dev

[      1.474][mmc]: read first backup failed in fun sdmmc_secure_storage_read line 1849

sunxi_secstorage_read fail

get secure storage map err

the private part isn't exist

WORK_MODE_BOOT

adver not need show

sunxi_bmp_logo_display

[disk_read_fs] no the partition

error: open bootlogo.bmp, maybe it is not exist

sunxi bmp info error : unable to open logo file bootlogo.bmp

[      1.507]Hit any key to stop autoboot:  0

cant find part named boot

sunxi_flash - sunxi_flash sub-system


Usage:

sunxi_flash read command parmeters :

parmeters 0 : addr to load(hex only)

parmeters 1 : the name of the part to be load

[parmeters 2] : the number of bytes to be load(hex only)

if [parmeters 2] not exist, the number of bytes to be load is the size of the part indecated on partemeter 1

boota: bad boot image magic, maybe not a boot.img?

sunxi#

위와같은 오류가 뜨지만 u-boot는 잘 됩니다~

아무래도 특정한 다른 부분에 u-boot header정보가 있는걸로 보입니다.

예상가는 부분이 있었긴 한데 다시 확인해 봐야 되겠네요~

---음... 아니네요..ㅠㅠ 14번 섹터에 PHOENIX_CARD_IMG 이라고 시작하며

50 48 4F 45 4E 49 58 5F 43 41 52 44 5F 49 4D 47 PHOENIX_CARD_IMG

00 01 20 00 0B 00 02 00 00 00 00 00 00 00 00 00 ...........................


아래와 같은 내용이 있었습니다.

10 00 00 00 00 80 00 00 4B 4B 47 00 61 64 64 00 .....€..KKG.add.

 bootloader1섹터 위치 (00 00 00 10 / Little Endian)

30 95 00 00 00 C0 0D 00 11 78 26 05 61 64 64 00 0•...A...x&.add.

 bootloader2(u-boot)섹터 위치 (00 00 30 95 / Little Endian)

00 A0 00 00 00 00 01 00 BE 3A 01 00 61 64 64 00

00 20 01 00 00 14 7C 00 F8 4E 17 08 61 64 64 00

00 A0 01 00 00 00 02 00 4B 59 01 00 61 64 64 00

 u-boot env섹터 위치 (00 01 A0 00 / Little Endian)


이부분이 헤더인줄 알았는데 아니네요..ㅠㅠ

head of uboot 가 무엇일까요??

분명히 uboot는 다 있는데... (38192~ 39951섹터)


*** 이유를 찾았습니다...

이유는... 없습니다!

오리지날 SD카드(모두 라이팅한)으로 부팅해봐도.. 저런 오류가 뜨네요..ㅠㅠ



참고... 여기있는 Allwinner H3 의 u-boot에서 지원하는 것들!

 sunxi#help

?       - alias for 'help'

advert  - show default advert

aw_fatload- load binary file from a dos filesystem

base    - print or set address offset

boot    - boot default, i.e., run 'bootcmd'

boota   - boota   - boot android bootimg from memory


bootd   - boot default, i.e., run 'bootcmd'

bootelf - Boot from an ELF image in memory

bootm   - boot application image from memory

bootvx  - Boot vxWorks from an ELF image

check_userdata- check user data

cmp     - memory compare

cp      - memory copy

crc32   - checksum calculation

delay_test- do a delay test

efex    - run to efex

efex_test- do a usb efex test

efuse_read- read efuse key

env     - environment handling commands

exit    - exit script

false   - do nothing, unsuccessfully

fastboot_test- do a sprite test

fatdown - download data to a dos filesystem

fatinfo - print information about filesystem

fatload - load binary file from a dos filesystem

fatls   - list files in a directory (default /)

go      - start application at address 'addr'

help    - print command description/usage

huk_test- create a huk as a test

key_test- Test the key value


logo    - show default logo

loop    - infinite loop on address range

mass_test- do a usb mass test

md      - memory display

memcpy_test- do a memcpy test

memtester- start application at address 'addr'

mm      - memory modify (auto-incrementing address)

mmc     - MMC sub system

mmcinfo - display MMC info

mtest   - simple RAM read/write test

mw      - memory write (fill)

nm      - memory modify (constant address)

power_probe- probe the axp output

printenv- print environment variables

pst     - read data from secure storageerase flag in secure storage

recovery- sunxi recovery function

reset   - Perform RESET of the CPU

run     - run commands in an environment variable

save_userdata- save user data

savecfg - save sys_config into flash if you execute command setcfg

saveenv - save environment variables to persistent storage

screen_char- show default screen chars

setcfg  - modify sys_config.fex

setenv  - set environment variables

showvar - print local hushshell variables

shutdown- shutdown the system

sprite_recovery- one key sprite recovery


sprite_test- do a sprite test

standby - run to boot standby

sunxi_bmp_info- manipulate BMP image data

sunxi_bmp_show- manipulate BMP image data

sunxi_boot_signature- sunxi_boot_signature sub-system

sunxi_flash- sunxi_flash sub-system

sunxi_so- sunxi_so sub-system

sys_config- show the sys config value

test    - minimal test like /bin/sh

timer_test- do a timer and int test

timer_test1- do a timer and int test

true    - do nothing, successfully

uburn   - do a burn from boot

version - print monitor, compiler and linker version

 



이제... 커널컴파일만 하면 어찌어찌 OS설치도 될텐데...

Comment +0

2014.11.13. 16:01



아... ppv4-install.sh좀 한번 더 볼걸... 후회가...

pogoplug v4 을 방금 저세상으로 보내고..ㅠㅠ

 

usb기능등이 있는 uboot.bin (http://archlinuxarm.org/os/ppv4/uboot.bin.gz 압축푼것)을 넣을려고 했다.

RAM에 write하고 go로 실행했더니 잘 되서 nand 0번지에 write을 하고 reset을 했는데...ㅠㅠ

망햇다. 안켜진다..ㅠㅠ

 

결론 uboot.bin을 0번지에 write하면 절대!안된다.

 

  mw 0x800000 0x0 0x100000

 tftp 0x800000 uboot.bin

이렇게 uboot.bin을 다운받은 뒤

  nand erase 0x100000 0x100000

 nand write 0x800000 0x100000 0x100000

이런식으로 0x100000번지에 write한 다음

  setend bootcmd "if usb start; then run mysecond_bootcmd; else nand read 0x800000 0x100000 0x100000; go 0x800000; fi"

이렇게 해주면 원래 있던 u-boot에는 usb start가 없으니 nand 0x100000번지에서 u-boot을 읽은 다음 실행해야 한다.

그리고 mysecond_bootcmd에는 자기가 원하는 bootcmd을 써 주면 된다.

 

아 글구 왜 직접 nand을 읽지 않고 if을 쓰느냐?

원래 u-boot와 두번째 u-boot가 같은 env 주소를 참조하기 때문이다.

 

 

 

아... 아... 아... 슬푸다..ㅠㅠ

USB3.0있어서 이걸로 802.11ac AP하나 만들려고 했는데..ㅠㅠㅠㅠㅠㅠㅠㅠ

Comment +0

2014.01.24. 13:33


구성은 라즈베리파이 + USB형 터치스크린컨트롤러 + 7Inch 모니터 이렇다.

 

그런데...

우선 USB터치컨트롤러는 리눅스 ARM환경또한 지원한다.(Daemon으로 작동하는 드라이버 바이너리)

그런데.. X환경에서는 캘리브레이션을 지원하는데...

Non X환경에서는 캘리브레이션을 지원하지 않는다..ㅠㅠ

결국 캘리브레이션은 직접 했다.

 

터치시 /dev/input/eventX 으로 데이터가 날라온다.

C으로 프로그램을 짰는데 mouse디바이스를 open하고

데이터가 날라오면 input_event구조체로 읽는다.

input_event는 <linux/input.h> 에 있다.

struct input_event {

 struct timeval time;

 __u16 type;

 __u16 code;

 __s32 value;

};

 

터치가 되면 type=3,

code=0또는 1 (0:X좌표, 1:Y좌표)

value = 좌표값 (화면상의 좌표가 아닌 터치컨트롤러에서 나오는 좌표값이다.)

이렇게 날라온다.

 

캘리브레이션은 5점 방식으로 하였다.


http://www.ti.com/lit/an/slyt277/slyt277.pdf

http://www.scienceprog.com/how-to-calibrate-touch-screen-display-on-stm32-board/

특히 두번째 링크가 큰 도움이 되었다ㅋ



처음에만 켈리브레이션을 하고 켈리브레이션값은 저장해 놓고 다음부터는 하지 않아도 된다.

 

Non X환경으로 직접 FrameBuffer을 맵핑해서 제어한다.

그래서 그런지 느리다;;;

CPU는 70%나 먹으면서;;

초당 100번(10000uS쉬면서) FB에 커서 위치를 표시한다.

글구 1000uS Timeout을 걸어놓고 mouse device을 읽으면서 1000uS 쉰다. 즉 초당 500번정도 마우스 값을 읽는걸 시도한다. (이것보다 더 많이 쉬게 하면 반응속도가 너무 느려짐...ㅠㅠ)

 

라즈베리의 한계 + 내 프로그래밍 실력ㅠㅠ 으로 느.리.다.

 

나중엔 이걸로 태블릿 비슷하게 만들어볼 계획이다.

Comment +1

  • dragom 2017.03.23 00:17

    터치 콘트롤러를 만들려고하다가 리눅스에서 터치 이벤트를 어떻게 처리해야할까에서 막혔었는데 참고가 될듯 합니다. 감사합니다