N2L Android 9.0에서 AndroidThings적용되나요?

Post Reply
harkworker
Posts: 21
Joined: Thu Feb 13, 2020 11:06 am
languages_spoken: korean
ODROIDs: ODROID-N2
Has thanked: 7 times
Been thanked: 3 times
Contact:

N2L Android 9.0에서 AndroidThings적용되나요?

Post by harkworker »

ODROID 포럼에 있는 N2 자료를 참고로 Android Studio에서 프로젝트 만들어서 테스트 중입니다.

Debug로 Tarce해보면...

manager = PeripheralManager.getInstance();
List<String> pwmList = manager.getPwmList(); <= pwmList의 크기가 0으로 나옵니다.
List<String> gpioList = manager.getGpioList(); <= 요분을 실행시키면 N2L 이 재부팅 됩니다.

잘 동작한다는 포럼의 샘플을 적용했는데...제가 뭔가 설정을 빼먹고 있는건가요?

N2L의 OS Image => selfinstall-odroidn2l-186-64bit-20221123.img.xz

Luke.go
Posts: 754
Joined: Mon May 30, 2016 1:55 pm
languages_spoken: english
Has thanked: 125 times
Been thanked: 122 times
Contact:

Re: N2L Android 9.0에서 AndroidThings적용되나요?

Post by Luke.go »

첨부된 파일을 해당 위치에 복사하신 후에 다시 시도해보시기 바랍니다.

things/lib64/odroidThings.so -> /vendor/lib64/hw/odroidThings.so
things/lib/odroidThings.so -> /vendor/lib/hw/odroidThings.so

Code: Select all

$ adb connect [device ip address]
$ adb remount
$ adb push things/lib64/odroidThings.so /vendor/lib64/hw/
동작 확인하시면 바로 다음 버전에 적용하겠습니다.
Attachments
things.zip
(72.71 KiB) Downloaded 15 times
These users thanked the author Luke.go for the post:
harkworker (Wed Nov 30, 2022 8:13 pm)

harkworker
Posts: 21
Joined: Thu Feb 13, 2020 11:06 am
languages_spoken: korean
ODROIDs: ODROID-N2
Has thanked: 7 times
Been thanked: 3 times
Contact:

Re: N2L Android 9.0에서 AndroidThings적용되나요?

Post by harkworker »

네. 첨부해주신 파일 적용해서 정상적인 실행 확인했습니다.

우선은 제가 테스트 중인 GPIO와 PWM부분만 테스트 했고요,
I2C와 SPI부분은 차후 추가로 해보고 혹시 문제가 있으면 다시 글 올리겠습니다.
감사합니다.
These users thanked the author harkworker for the post (total 2):
Luke.go (Thu Dec 01, 2022 8:45 am) • steve.jeong (Thu Dec 01, 2022 9:54 am)

harkworker
Posts: 21
Joined: Thu Feb 13, 2020 11:06 am
languages_spoken: korean
ODROIDs: ODROID-N2
Has thanked: 7 times
Been thanked: 3 times
Contact:

Re: N2L Android 9.0에서 AndroidThings적용되나요?

Post by harkworker »

Odroid Things 테스트 후 몇가지 해결안되는 문제가 있어서 문의 글 올립니다.

+ GPIO Input 상태변화 콜백함수
PIN의 Input 상태가 변화할 때 같은 상태로(RISING or FALLING) 두번이상 연속되어 콜백함수가 호출되는 경우가 있습니다.
어떨땐 Riging, Falling시 정확시 1회씩만 호출되는 경우도 있습니다.

+ I2C read, write 함수
I2C Register Device(DS3231 과 같은 Device) R/W 모두 정상동작 합니다.
I2C Memory Device(AT24C32 과 같은 Device)의 Data 읽을 때 엉뚱한 데이터가 읽혀 들어옴(10~20% 성공율)
Write는 동작 합니다.

AT24C32 Device에서 메모리 데이터를 읽는부분 Code 예.
int mem_address = 0;
byte[] addr_buff = new byte[2];
addr_buff[0] = (byte)(mem_address / 256);
addr_buff[1] = (byte)(mem_address % 256);
i2c_dev.write(addr_buff, 2);

int size = 32;
//int size = 256;
byte[] read_buff = new byte[size];
i2c_dev.read(read_buff, size);

테스트용 쉴드
아두이노용 DS3231 RTC 쉴드로 테스트. (ds3231 + AT24C32)

+ UART 수신(ODROID 측 수신)
ODROID RX Data callback function
데이터 수신 함수가 콜백되어 데이터를 모두 읽어들였지만,
그 후 수차례 콜백함수가 추가로 호출 됨.(데이터를 읽으면 size == 0)

ODROID Data 수신 문제
PC -> ODROID로 전송 시 일부 특정값이 수신에서 제외됨.(uartDevice.read 함수에서 읽히지 않음)
송신한 데이터와 수신한 데이터 예)
PC TX[1 bytes] : 0x03
OD RX[ ] : 수신 콜백함수 호츨없음

PC TX[16 bytes] : 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0a 0x0b 0x0c 0x0d 0x0e 0x0f
OD RX[12 bytes] : 0x04 0x05 0x06 0x07 0x08 0x09 0x0a 0x0b 0x0c 0x0d 0x0e 0x0f

PC TX[1 bytes] : 0x11
OD RX[ ] : 수신 콜백함수 호츨없음

PC TX[1 bytes] : 0x13
OD RX[ ] : 수신 콜백함수 호츨없음

PC TX[1 bytes] : 0x15
OD RX[ ] : 수신 콜백함수 호츨없음

PC TX[1 bytes] : 0x1a
OD RX[ ] : 수신 콜백함수 호츨없음

PC TX[1 bytes] : 0x1c
OD RX[ ] : 수신 콜백함수 호츨없음

PC TX[16 bytes] : 0x10 0x11 0x12 0x13 0x14 0x15 0x16 0x17 0x18 0x19 0x1a 0x1b 0x1c 0x1d 0x1e 0x1f
OD RX[ 3 bytes] : 0x1d 0x1e 0x1f

ODROID Data 수신 시 시스템이 리부팅 되는 상황이 불특정하게 발생 됨.(데이터의 크기와 동작 시간에 상관이 없음)

통신 설정
GPIO_PIN_HEADEDR_40 / 6번-PIN == GND
GPIO_PIN_HEADEDR_40 / 8번-PIN == RX
GPIO_PIN_HEADEDR_40 / 10번-PIN == TX

ODROID 구매 시 같이 구매한 RS-232 Convertor를 통해서 PC-USB 포트로 연결.
ODROID -> PC로는 데이터가 잘 전달됨.

BAUD : 115,200
PARITY : NONE
DATA : 8 Bit
STOP : 1 Bit

현재 N2L에 사용중인 OS Image는 selfinstall-odroidn2l-187-64bit-20221216.img.xz 입니다.

Luke.go
Posts: 754
Joined: Mon May 30, 2016 1:55 pm
languages_spoken: english
Has thanked: 125 times
Been thanked: 122 times
Contact:

Re: N2L Android 9.0에서 AndroidThings적용되나요?

Post by Luke.go »

답변이 늦어져서 죄송합니다.

먼저 UART 의 콜벡 수신 구현에 링버퍼를 적용한 내역을 공유해 드립니다.

압축을 푸신 후애 /vendor/lib(64)/hw/ 에 odroidThings.so 파일을 복사하신 후에 해당 내역 확인 부탁드립니다.

Code: Select all

$ unzip odroidThings.zip
$ adb remount
$ adb push odroidThings/lib/odroidThings.so /vendor/lib/hw/
...
I2C와 GPIO는 현재 확인 중입니다.
Attachments
odroidThings.zip
(73.95 KiB) Downloaded 9 times

harkworker
Posts: 21
Joined: Thu Feb 13, 2020 11:06 am
languages_spoken: korean
ODROIDs: ODROID-N2
Has thanked: 7 times
Been thanked: 3 times
Contact:

Re: N2L Android 9.0에서 AndroidThings적용되나요?

Post by harkworker »

네. 주신 파일로 remount해서 각 폴더에(lib, lib64) push해서 넣고, shell로
파일내용 확인 후 기존테스트 하던 어플을 실행하니 에러가 발생합니다.

제가쓰는 디버거에서는요..

2023-01-03 13:56:22.924 4305 4322 Debug PeripheralManager PeripheralManager init
2023-01-03 13:56:24.256 4305 4322 Debug PeripheralManager Remote Exception!!

이렇게 나옴니다.(PeripheralManager init 이 실패합니다)

그래서 전에 보내주신(22/11/30 일자)파일로 다시 복사 후 어플 실행하면...
PeripheralManager init 이 잘되고 디바이스 리스트들도 잘 올라 옵니다.

혹시나 위 과정을 2번정도 반복해서 확인했지만, 결과는 같습니다.
확인 부탁드립니다.

Luke.go
Posts: 754
Joined: Mon May 30, 2016 1:55 pm
languages_spoken: english
Has thanked: 125 times
Been thanked: 122 times
Contact:

Re: N2L Android 9.0에서 AndroidThings적용되나요?

Post by Luke.go »

이번 첨부파일에서 다시한번 확인 부탁드립니다.
Attachments
things.zip
(74.47 KiB) Downloaded 8 times

harkworker
Posts: 21
Joined: Thu Feb 13, 2020 11:06 am
languages_spoken: korean
ODROIDs: ODROID-N2
Has thanked: 7 times
Been thanked: 3 times
Contact:

Re: N2L Android 9.0에서 AndroidThings적용되나요?

Post by harkworker »

이번에 첨부해 주신 파일에서는 PeripheralManager init 단계에서
에러가 발생하지 않고 잘 진행됩니다만...

UART만 확인해보니
OD -> PC로는 잘 전송되는데요,
PC -> OD로 한 바이트(0x20) 전송했는데.... N2L이 리부팅 됩니다.

참고로,
디버그를 보면 UART RX Callback 함수가 계속 호출(읽을 data size == 0)되다가 리부팅 됩니다.

여러번 해보니 리부팅 될때도 있고,
프리징(마우스도 포인터 안움직임 / N2L의 블루 LED 는 블링킹됨)될때도 있네요.

Luke.go
Posts: 754
Joined: Mon May 30, 2016 1:55 pm
languages_spoken: english
Has thanked: 125 times
Been thanked: 122 times
Contact:

Re: N2L Android 9.0에서 AndroidThings적용되나요?

Post by Luke.go »

혹시 logcat 로그 공유 가능할까요?

그리고 확인할 때 사용하신 코드 있으시면 공유 가능할까요?

harkworker
Posts: 21
Joined: Thu Feb 13, 2020 11:06 am
languages_spoken: korean
ODROIDs: ODROID-N2
Has thanked: 7 times
Been thanked: 3 times
Contact:

Re: N2L Android 9.0에서 AndroidThings적용되나요?

Post by harkworker »

logcat 파일하고, 현재 N2L에서 테스트하고있는 apk파일을 첨부해서 드려요~
APK 파일(용량이커서 첨부가 안되네요) => https://drive.google.com/file/d/1nN-B1c ... sp=sharing

송수신 확인은 아직 별도의 코드가 있는게 아니고요,
현재는 원시적으로 송수신 데이터 확인만 할수있도록 CommPortMaster라는
프로그램으로 데이터만 확인합니다. 제가 만든건 아니지만 참고로 보내드려 봅니다.

혹시나 해서 참고로 UART부분을 약간설명을 드리자면...
안드로이드 스튜디오에서 OD-Things 제어 라이브러리파일을(.aar) 만들고
Unity에서 플러그인으로 붙여서 프로젝트를 구성중입니다.
모두 올려도 오히려 도움이 안될거 같어서...UART 부분 발췌해서 드려볼께요~
현재 데이터 수신시 Unity c#부분도 로그 출력외 별도 처리 로직 없는상태입니다.

.AAR파일의 UART부분 (이리 디버깅 저리 디버깅 하나보니..리마크 부분이 좀 많습니다.)

Code: Select all

//***** UART *****************************************
	public int GPIO_GetUartDeviceCount(Context context) {
		if (manager == null) return 0;
		return uartDeviceList.size();
	}

	public String GPIO_GetUartDeviceName(Context context, final int index) {
		if (manager == null) return "";
		if (index >= uartDeviceList.size()) return "";
		return uartDeviceList.get(index);
	}

	public boolean GPIO_OpenUartDevice(Context context, final int dev_index) {
		if (manager == null) return true;
		if (dev_index >= uartDeviceList.size()) return true;

		if (uartDeviceHashMap.containsKey(dev_index)) {   // If it's opened, then close and remove it.
			try {
				uartDeviceHashMap.get(dev_index).close();
			} catch (IOException e) {
				Log.e("AAR-poLibrary", "Cannot close uart dev.[" + uartDeviceList.get(dev_index) +"]", e);
			}
			uartDeviceHashMap.remove(dev_index);
		}

		try {
			UartDevice uart = manager.openUartDevice(uartDeviceList.get(dev_index));
			if (uart != null) {
				uart.setHardwareFlowControl(UartDevice.HW_FLOW_CONTROL_NONE);
//				uart.setModemControl();
//				uart.setBaudrate(9600);
				uart.setBaudrate(115200);
				uart.setParity(UartDevice.PARITY_NONE);
				uart.setDataSize(8);
				uart.setStopBits(1);
//				uart.write(bootStr.getBytes(), bootStr.length());
				uart.write(bootData, bootData.length);
				uart.registerUartDeviceCallback(new UartDeviceCallback() {
					@Override
					public boolean onUartDeviceDataAvailable(UartDevice uartDevice) {
						try {
							int read_count = uartDevice.read(rxBuff, rxBuff.length);
//							if (read_count > 0) {
								Log.d("AAR-poLibrary", "UART[" + uartDevice.getName() + "] Got data-" + Integer.toString(read_count));
//								for (int index = 0; index < read_count; index++) {
//									Log.d("AAR-poLibrary", "  [" + index + "]:0x" + Integer.toHexString((byte) (rxBuff[index] & 0xff)));
//								}
								rxParamStr = "";
								for (int index = 0; index < read_count; index++) {
									rxParamStr += " ";
//									rxParamStr += String.format("%02X", Integer.toHexString((Byte.toUnsignedInt(rxBuff[index]) & 0xff)));
									rxParamStr += String.format("%02X", (Byte.toUnsignedInt(rxBuff[index]) & 0xff));
								}
								UnityPlayer.UnitySendMessage(UNITY_OBJECT_NAME, "GpioRxDataCallBack", rxParamStr);  // <-여기서 Unity C#으로
								Log.d("AAR-poLibrary", "RX-[" + rxParamStr + "]");
//							}
							return true;
						} catch (IOException e) {
							Log.e("AAR-poLibrary", "Cannot read data from UART.[" + uartDevice.getName() +"]", e);
						}
						return true;
					}
            });
				uartDeviceHashMap.put(dev_index, uart);
				return true;
			}
		} catch (IOException e) {
			Log.e("AAR-poLibrary", "Cannot open uart dev.[" + uartDeviceList.get(dev_index) +"]", e);
		}
		return false;
	}

	public boolean GPIO_CloseUartDevice(Context context, final int dev_index) {
		if (manager == null) return false;
		boolean its_opened = uartDeviceHashMap.containsKey(dev_index);
		if (!its_opened) return false;   // It hasn't opened.
		try {
//			I2cDevice dev = i2cDeviceHashMap.get(slave_addr);
//			dev.close();
			uartDeviceHashMap.get(dev_index).flush(UartDevice.FLUSH_IN_OUT);
			uartDeviceHashMap.get(dev_index).close();
			uartDeviceHashMap.remove(dev_index);
			return true;
		} catch (IOException e) {
			Log.e("AAR-poLibrary", "Cannot close uart device.[" + uartDeviceList.get(dev_index) +"]", e);
		}
		return false;
	}

//***** SPI ******************************************
Attachments
CommPortMaster.zip
(6.63 MiB) Downloaded 11 times
logcat.txt
(125.76 KiB) Downloaded 10 times

Luke.go
Posts: 754
Joined: Mon May 30, 2016 1:55 pm
languages_spoken: english
Has thanked: 125 times
Been thanked: 122 times
Contact:

Re: N2L Android 9.0에서 AndroidThings적용되나요?

Post by Luke.go »

버그확인 하고 수정 하였습니다.

uart 다시 한번 확인 부탁드립니다.

감사합니다.
Attachments
things.zip
(74.35 KiB) Downloaded 8 times
These users thanked the author Luke.go for the post:
harkworker (Thu Jan 05, 2023 4:47 pm)

harkworker
Posts: 21
Joined: Thu Feb 13, 2020 11:06 am
languages_spoken: korean
ODROIDs: ODROID-N2
Has thanked: 7 times
Been thanked: 3 times
Contact:

Re: N2L Android 9.0에서 AndroidThings적용되나요?

Post by harkworker »

네. 우선 급하게 동작만 확인했습니다.
이제는 리부팅 되거나 프리징 되지는 않습니다.
내일 쯤 세부 데이터까지 확인 해보고 문제가 있으면 다시 글 올리겠습니다.
그리고 위에 글에 올려드린 Gpio input callback과 I2C부분도 확인 부탁드리겠습니다.
감사합니다~

harkworker
Posts: 21
Joined: Thu Feb 13, 2020 11:06 am
languages_spoken: korean
ODROIDs: ODROID-N2
Has thanked: 7 times
Been thanked: 3 times
Contact:

Re: N2L Android 9.0에서 AndroidThings적용되나요?

Post by harkworker »

UART 부분에서 전에도 특정데이터가 전달 안되는 문제가 있는듯 보여서
0x00 ~ 0xff 까지 모두 한바이트씩만 전송 테스트 해봤습니다.
아직도 전달 안되는 일부 특정 데이터가 있습니다.

모든 바이트 전송 시 USB-UART 컨버터의 블루 LED는 깜빡거립니다.
PC -> OD로 데이터 전송 시 Rx Callback으로 전달 안되는 특정 데이터

0x03
0x11
0x13
0x1a
0x1c

입니다. 확인 부탁드립니다.

그리고 여기에 첨부 해주신 odroidThing.so 파일들이 N2(플러스 아님)에도
적용할 수 있는 건가요?

Luke.go
Posts: 754
Joined: Mon May 30, 2016 1:55 pm
languages_spoken: english
Has thanked: 125 times
Been thanked: 122 times
Contact:

Re: N2L Android 9.0에서 AndroidThings적용되나요?

Post by Luke.go »

네 동일하게 동작 합니다.

혹시 m1이 있으시면 m1에서도 테스트 가능할까요?

Luke.go
Posts: 754
Joined: Mon May 30, 2016 1:55 pm
languages_spoken: english
Has thanked: 125 times
Been thanked: 122 times
Contact:

Re: N2L Android 9.0에서 AndroidThings적용되나요?

Post by Luke.go »

uart 문제점 확인 하고 적용한 버전 다시한번 보내드립니다.
컨트롤 비트 설정 문제로 보이네요.
해당 비트 정상적으로 수신되는지 확인 부탁드립니다.
Attachments
things.zip
(74.38 KiB) Downloaded 9 times
These users thanked the author Luke.go for the post:
harkworker (Fri Jan 06, 2023 2:38 pm)

harkworker
Posts: 21
Joined: Thu Feb 13, 2020 11:06 am
languages_spoken: korean
ODROIDs: ODROID-N2
Has thanked: 7 times
Been thanked: 3 times
Contact:

Re: N2L Android 9.0에서 AndroidThings적용되나요?

Post by harkworker »

Luke.go wrote:
Fri Jan 06, 2023 11:35 am
네 동일하게 동작 합니다.

혹시 m1이 있으시면 m1에서도 테스트 가능할까요?
m1은 N2를 말씀하시는 건가요?
아...M1이라는 모델이 있군요. 저는 그 모델은 없습니다.

제가 지금 가지고 있는건 N2하고 N2L입니다.
N2는 주말에 테스트 가능합니다.
테스트 해보고 다음주중에 결과 알려드리겠습니다.
Last edited by harkworker on Fri Jan 06, 2023 2:45 pm, edited 1 time in total.

harkworker
Posts: 21
Joined: Thu Feb 13, 2020 11:06 am
languages_spoken: korean
ODROIDs: ODROID-N2
Has thanked: 7 times
Been thanked: 3 times
Contact:

Re: N2L Android 9.0에서 AndroidThings적용되나요?

Post by harkworker »

오늘 올려주신(23/01.06일자) .SO 파일에서는 UART를 통해서 데이터 빠짐없이 수신 Callback함수 호출 됩니다.
감사합니다~
Gpio input callback과 I2C부분도 확인 부탁드리겠습니다.

harkworker
Posts: 21
Joined: Thu Feb 13, 2020 11:06 am
languages_spoken: korean
ODROIDs: ODROID-N2
Has thanked: 7 times
Been thanked: 3 times
Contact:

Re: N2L Android 9.0에서 AndroidThings적용되나요?

Post by harkworker »

올려주신 23/01/06일자 .SO 파일로 N2에서는 우선 UART만 테스트 했는데요,
현재까지 체크해본 바로는 문제없이 송수신이 됩니다. (전엔 N2에서도 같은 문제가 있었거든요...)

Luke.go
Posts: 754
Joined: Mon May 30, 2016 1:55 pm
languages_spoken: english
Has thanked: 125 times
Been thanked: 122 times
Contact:

Re: N2L Android 9.0에서 AndroidThings적용되나요?

Post by Luke.go »

다음 이미지를 받으셔서 새로 설치하신 후에 i2c 를 테스트 해보시기 바랍니다.

https://dn.odroid.com/S922X/ODROID-N2L/ ... things.img

단, 공유해 주신대로 AT24C32 와 같은 장치를 사용하기 위해선 reg address 에 사용 되는 바이트 사이즈를 2로 추가해야 할 필요가 있어서 추가 작업이 필요 합니다. (http://realsys.co.kr/data/arm/9.I2C_EEP사용.pdf 이를 참고해주세요)
두가지 방법을 제안 합니다.

첫번째
adb shell 로 기기에 접속 하신 후에 다음 명령어를 수행한 후에 테스트를 진행 해 주세요

Code: Select all

$ adb shell
$ setprop persist.android.things.i2c.reg.size.0.80 2
여기서 0 은 i2c 버스 번호, 80은 디바이스 주소입니다.(0x50)

두번째
android things에서 I2C 장치를 읽거나 쓸때 전달하는 주소 값에 0x10000000 를 추가해 주세요.
예제 코드는 다음과 같습니다.

Code: Select all

            PeripheralManager manager = PeripheralManager.getInstance();

            I2cDevice eeprom = manager.openI2cDevice("I2C-1", 0x50);

            int size = 400;
            byte[] buffer = new byte[size];
            eeprom.readRegBuffer(0x10000000, buffer, size); // 0x10000000 + address(00)
AT24C32 에서 동작 확인 하였으나, 직접 확인 후에 알려주시면 감사하겠습니다.

Luke.go
Posts: 754
Joined: Mon May 30, 2016 1:55 pm
languages_spoken: english
Has thanked: 125 times
Been thanked: 122 times
Contact:

Re: N2L Android 9.0에서 AndroidThings적용되나요?

Post by Luke.go »

죄송 합니다. 주소 버그가 있네요.

첨부파일을 적용 후에 다시 한번 확인 부탁드립니다.
Attachments
things.zip
(79.59 KiB) Downloaded 6 times
These users thanked the author Luke.go for the post:
harkworker (Fri Jan 20, 2023 8:59 am)

harkworker
Posts: 21
Joined: Thu Feb 13, 2020 11:06 am
languages_spoken: korean
ODROIDs: ODROID-N2
Has thanked: 7 times
Been thanked: 3 times
Contact:

Re: N2L Android 9.0에서 AndroidThings적용되나요?

Post by harkworker »

네. 테스트해 보겠습니다. 계속 관심가지고 확인해 주셔서 감사합니다~
그렇지 않아도 23/01/18일 자 Img에서도 되는 듯 아닌 듯 아리송한 문제가 있어서 계속 R/W 부분 수정해가면서 확인 중이었습니다.
어쩌면 설 연휴 후에 글을 올리게 될 수도 있겠습니다.
모두 새해 복 많이 받으세요~
These users thanked the author harkworker for the post:
Luke.go (Fri Jan 20, 2023 9:52 am)

harkworker
Posts: 21
Joined: Thu Feb 13, 2020 11:06 am
languages_spoken: korean
ODROIDs: ODROID-N2
Has thanked: 7 times
Been thanked: 3 times
Contact:

Re: N2L Android 9.0에서 AndroidThings적용되나요?

Post by harkworker »

음. 첨부해주신 things push후 부팅시키니 하드커널 그래픽 화면 지나고...
android영문 로고 그라데이션 부분에서 넘어가지 않습니다.(계속 칼라 그라데이션만 반복중입니다)
보드의 전원 LCD(적색)은 On 상태이고, Blue LED는 점멸하고 있습니다.

Luke.go
Posts: 754
Joined: Mon May 30, 2016 1:55 pm
languages_spoken: english
Has thanked: 125 times
Been thanked: 122 times
Contact:

Re: N2L Android 9.0에서 AndroidThings적용되나요?

Post by Luke.go »

죄송합니다. 바로 selfinstall 이미지 업데이트해서 알려드리겠습니다.

Luke.go
Posts: 754
Joined: Mon May 30, 2016 1:55 pm
languages_spoken: english
Has thanked: 125 times
Been thanked: 122 times
Contact:

Re: N2L Android 9.0에서 AndroidThings적용되나요?

Post by Luke.go »

위에서 공유해 드린 selfinstall 파일 변경되었습니다. 확인 부탁드립니다.

그리고 반복되는 에러 발생하게 된 점 죄송합니다.

Luke.go
Posts: 754
Joined: Mon May 30, 2016 1:55 pm
languages_spoken: english
Has thanked: 125 times
Been thanked: 122 times
Contact:

Re: N2L Android 9.0에서 AndroidThings적용되나요?

Post by Luke.go »

새로운 이미지 업데이트 하였습니다.

gpiocallback 확인 부탁드립니다.
gpio callback 이 여러번 호출 되는 문제를 해결 하기 위해 콜백 시간의 델타를 적용 했습니다.
때문에 델타 시간 보다 짧은 시간 안에 콜백이 호출 될 경우 무시 될 수 있습니다.

콜백 시간 값은 persist.android.things.gpio.callback.delta 값으로 설정 가능하며,
기본 값은 300000000입니다.

해당 값은 clock_gettime(CLOCK_REALTIME, *) 함수에서 얻은 값의 시간 차 중에 가장 중복되는 콜백이 적은 값으로 설정하였습니다.
These users thanked the author Luke.go for the post:
harkworker (Thu Jan 26, 2023 9:16 am)

harkworker
Posts: 21
Joined: Thu Feb 13, 2020 11:06 am
languages_spoken: korean
ODROIDs: ODROID-N2
Has thanked: 7 times
Been thanked: 3 times
Contact:

Re: N2L Android 9.0에서 AndroidThings적용되나요?

Post by harkworker »

네. 곧 테스트 해보겠습니다. 감사합니다.
아직 I2C(AT24C32)확인 중 입니다.

harkworker
Posts: 21
Joined: Thu Feb 13, 2020 11:06 am
languages_spoken: korean
ODROIDs: ODROID-N2
Has thanked: 7 times
Been thanked: 3 times
Contact:

Re: N2L Android 9.0에서 AndroidThings적용되나요?

Post by harkworker »

* I2C 테스가 잘 안되어서 1Byte Write/Read만 해서 신호를 캡춰해서 첨부 해봤습니다.
참고로 혹시 제가 가진 테스트 쉴드가(DS3231 + AT2C32) 망가졌을 가능성도 약간은 있습니다.(전원연결 시 부주의)
하지만 일단 같이 붙어있는 DS3231은 R/W가 잘되기에 주문만 해놓고 있던걸로 테스트 진행 해봤습니다.

* Code 부분
PeripheralManager manager = PeripheralManager.getInstance();
I2cDevice eeprom = manager.openI2cDevice("I2C-1", 0x50);

* 1Byte Write (Addr:0x000, Data : 0x5a)
* Write 부분코드
int wrt_size = 1;
byte[] wrt_buffer = new byte[wrt_size];
wrt_buffer[0] = 0x5a;
eeprom.writeRegBuffer(0x10000000, wrt_buffer, wrt_size); // 0x10000000 + address(0x000)

* 1Byte Read (Addr:0x000)
* Read 부분코드
int rd_size = 1;
byte[] rd_buffer = new byte[rd_size];
eeprom.readRegBuffer(0x10000000, rd_buffer, rd_size); // 0x10000000 + address(0x000)

// Log 결과 rd_buffer[0] = 0x00;

* 첨부된 캡춰 화면설명
위 코드를 1회 실행시키면 파형이 딱 2부분으로 출력 됩니다.(여러차례 테스트)
넓혀가면서 4장으로 캡춰 해봤습니다.
제가 생각하기에는 더 많은 출력이 있어야 하지않나 생각됩니다.
확인 부탁드립니다.

* GPIO Callback 중복호출 부분
오히려 둔감하게 느낄 정도로 확실히 개선 되었습니다.
약 10미리초 이내는 버리고 10미리초 이상은 callback이 호출되게 하려면
세팅값을 대략 어느정도 설정해야 할지 알려주시면 고맙겠습니다.
Attachments
I2C_RW_Capture.zip
(347.87 KiB) Downloaded 5 times

Luke.go
Posts: 754
Joined: Mon May 30, 2016 1:55 pm
languages_spoken: english
Has thanked: 125 times
Been thanked: 122 times
Contact:

Re: N2L Android 9.0에서 AndroidThings적용되나요?

Post by Luke.go »

혹시 다음과 같이 테스트 가능할까요.
byte[] wrt_buffer = "this is test string".getBytes();
wrt_size = wrt_buffer.length
위와 같이 설정후 쓰기,
byte[] rd_buffer = new byte[wrt_size];
읽기.

바이트 단위 읽기 관련해서 다시 확인 해보겠습니다.

그리고 gpio callback 은 현재 내부 구현을 재 작업하고 있습니다.
현재 공유해 드린 이미지 파일에선 0.6hz 이상에서는 모든 콜백이 정상적으로 처리되지 않을 수 있는 상황입니다.
공유해드린 persist.android.things.gpio.callback.delta 값은 300 millisecond 값입니다.

그러므로 10000000 로 값을 설정 하신 후에 재부팅 후에 확인 바랍니다.

harkworker
Posts: 21
Joined: Thu Feb 13, 2020 11:06 am
languages_spoken: korean
ODROIDs: ODROID-N2
Has thanked: 7 times
Been thanked: 3 times
Contact:

Re: N2L Android 9.0에서 AndroidThings적용되나요?

Post by harkworker »

* I2C 테스트 결과입니다.
* 테스트-1 (Write and Read)
byte[] wrt_buffer = "this is test string".getBytes();
int wrt_size = wrt_buffer.length;
eeprom.writeRegBuffer(0x10000000, wrt_buffer, wrt_size);

byte[] rd_buffer = new byte[wrt_size];
eeprom.readRegBuffer(0x10000000, rd_buffer, wrt_size);

// 결과값 Ok.(rd_buffer == "this is test string")
// Test-1 신호 캡춰파일 첨부합니다. ( I2C_WirteRead_Capture.zip / 2개의 파형이 잡힙니다.)

* 테스트-2 (프로그램 종료 후 다시 컴파일 하여 실행 / 쓰기동작 제외 / Read only)
byte[] wrt_buffer = "this is test string".getBytes();
int wrt_size = wrt_buffer.length;
// eeprom.writeRegBuffer(0x10000000, wrt_buffer, wrt_size); // <== 제외

byte[] rd_buffer = new byte[wrt_size];
eeprom.readRegBuffer(0x10000000, rd_buffer, wrt_size);

// 결과 Error.(rd_buffer에 엉뚱한 값이 읽혀 들어옴)
// Test-2 신호 캡춰파일 첨부합니다. ( I2C_ReadOnly_Capture.zip / 1개의 파형만 잡힙니다.)

출력신호를 캡춰해보니 혹시 제가 뭘 잘못 확인하고 있는게 아닐까 싶을정도로...
한 바이트 Write/Read때랑 같은것 같습니다. (여러번 다시 확인해봤습니다)
마치 실제 디바이스에 쓰고 읽는것이 아니라...메모리 버퍼에서 에뮬레이션 되는듯한(???) 그런 느낌입니다.

* GPIO Callback
persist.android.things.gpio.callback.delta 10000000 설정 후 테스트했습니다.
값이 잘 동작됩니다.
확실히 설정값을 작게 하니 가끔 중복은 생기지만, Both EDGE로 걸고 프로그램서 약간
걸러내서 사용하면 될듯합니다.
Attachments
I2C_WirteRead_Capture.zip
(243.27 KiB) Downloaded 2 times
I2C_ReadOnly_Capture.zip
(159.76 KiB) Downloaded 2 times

Luke.go
Posts: 754
Joined: Mon May 30, 2016 1:55 pm
languages_spoken: english
Has thanked: 125 times
Been thanked: 122 times
Contact:

Re: N2L Android 9.0에서 AndroidThings적용되나요?

Post by Luke.go »

새로운 이미지가 업데이트 되었으니 확인 부탁드립니다.
GPIO callback 은 delta값이 기본 10ms 값으로 변경 되었습니다.
기존 방법과 동일하게 delta값을 변경 가능합니다. 단 내부 구현은 변경될 예정입니다. 현재 60hz까지 동작 보장 됩니다.

I2C 구현도 변경 되었습니다.
그런데 확인해보니 at24c32 의 경우 읽기와 쓰기의 경우 20ms 이상의 딜레이가 필요한 것으로 보이며, 1page 당 쓰기/일기 버퍼 크기도 32byte 였습니다.
해당 값에 맞게 설정 후에 테스트 해보시기 바랍니다.

제가 사용한 테스트 코드 내역 공유합니다.

Code: Select all

            int wrt_size;
            byte[] wrt_buffer;// = new byte[wrt_size];
            wrt_buffer = "test test test test test".getBytes();
            wrt_size = wrt_buffer.length;
//            eeprom.writeRegBuffer(0x10000000 | 0x300, wrt_buffer, wrt_size); // 0x10000000 + address(0x000)

            sleep(25);

            int rd_size = wrt_buffer.length;
            byte[] rd_buffer = new byte[rd_size];
//            eeprom.readRegBuffer(0x10000000 | 0x300, rd_buffer, rd_size); // 0x10000000 + address(0x000)


            eeprom.readRegBuffer(0x10000000 | 0x110, rd_buffer, 1);

harkworker
Posts: 21
Joined: Thu Feb 13, 2020 11:06 am
languages_spoken: korean
ODROIDs: ODROID-N2
Has thanked: 7 times
Been thanked: 3 times
Contact:

Re: N2L Android 9.0에서 AndroidThings적용되나요?

Post by harkworker »

다시 주문한 테스트 키트는 배송 사고가 발생하고, 급히 해결해야하는 업무가 생겨서
테스트가 좀 늦어질 듯 합니다. 테스트하는 데로 결과를 올리겠습니다.

Post Reply

Return to “N2/N2+”

Who is online

Users browsing this forum: No registered users and 2 guests