Date   

porting cyclictest to zephyr

João Costa
 

Hello,

In [1], and not only, it is mentioned that cyclictest was used with zephyr. However, I cannot find any specific documentation regarding this combination (zephyr + cyclictest).

Could anyone explain me, or point me in the right direction, how to port cyclictest into zypher?

Thanks




Re: Zephyr 2.6.0 and st_ble_sensor sample on the nucleo_wb55rg board. #ble #bluetooth #stm32

Erwan Gouriou
 

Hi Kevin,

Thanks for reporting this.
Would you mind creating a github issue ?
We'll investigate the point

BR
Erwan


On Wed, 16 Jun 2021 at 00:09, <kevin@...> wrote:

I would like to move a BLE project from Zephyr 2.5.0 to 2.6.0. The st_ble_sensor sample included in the Zephyr 2.5.0 tree compiles and runs successfully with the nucleo_wb55rg eval board, but does not work when I attempt the same from the Zephyr 2.6.0 tree. In this case the board advertises correctly, and is seen by ST BLE Sensor iPhone app, but an attempt to connect results in a forever-spinning Connecting icon. With our own project code we get a connection notification from the bluetooth subsystem and then the client times out while trying to enumerate the GATT.

Has anybody made the st_ble_sensor sample to work with the nucleo_wb55rg eval board? Wouldn't this be part of the Zephyr release testing?

Thanks,

Kevin


Zephyr 2.6.0 and st_ble_sensor sample on the nucleo_wb55rg board. #ble #bluetooth #stm32

kevin@...
 

I would like to move a BLE project from Zephyr 2.5.0 to 2.6.0. The st_ble_sensor sample included in the Zephyr 2.5.0 tree compiles and runs successfully with the nucleo_wb55rg eval board, but does not work when I attempt the same from the Zephyr 2.6.0 tree. In this case the board advertises correctly, and is seen by ST BLE Sensor iPhone app, but an attempt to connect results in a forever-spinning Connecting icon. With our own project code we get a connection notification from the bluetooth subsystem and then the client times out while trying to enumerate the GATT.

Has anybody made the st_ble_sensor sample to work with the nucleo_wb55rg eval board? Wouldn't this be part of the Zephyr release testing?

Thanks,

Kevin


Re: Activate shell over uart

Ruud Derwig
 

Hi Jacob,

 

> I'm trying to enable the shell subsystem over the uart console on my board with no luck.

 

It seems to be a problem in the board/test config for the ARC hsdk board. Watson is looking into it:

https://github.com/zephyrproject-rtos/zephyr/issues/36254

 

Feel free to subscribe to the issue to be notified of updates.

 

Ruud.


Re: RFC: Developer Experience WG kick off - we want your input!

Kumar Gala
 

On Jun 14, 2021, at 10:21 AM, Jonathan Beri <jberi@golioth.io> wrote:

Hi all,

During a BoF session at this year's Developer Summit, several of us felt the need to kick off a temporary working group focused on the Developer Experience of Zephyr. Topics that spurred the discussion included Editor and IDE configuration, (ex. what's the VS Code experience?) & CI/CD performance with Github Action.

We'd like to collect comments at this Github Discussion: https://github.com/zephyrproject-rtos/zephyr/discussions/36194. But feel free to reply here and I'll make sure your feedback is included.

Looking forward to creating the best-possible developer experience for Zephyr, together!

One topic I think would be good to take on is:

https://github.com/zephyrproject-rtos/crosstool-ng-old/issues/25

- k


RFC: Developer Experience WG kick off - we want your input!

Jonathan Beri
 

Hi all,

During a BoF session at this year's Developer Summit, several of us felt the need to kick off a temporary working group focused on the Developer Experience of Zephyr. Topics that spurred the discussion included Editor and IDE configuration, (ex. what's the VS Code experience?) & CI/CD performance with Github Action.

We'd like to collect comments at this Github Discussion: https://github.com/zephyrproject-rtos/zephyr/discussions/36194. But feel free to reply here and I'll make sure your feedback is included.

Looking forward to creating the best-possible developer experience for Zephyr, together!

--


how to support new touch screen sensor with integration to LVGL

Matias N.
 

Hi,
I'm considering adding support for a touchscreen sensor (CST816, used in PineTime) and I would like
to use LVGL as well. Right now LVGL expects touchscreen sensor to be exposed via KSCAN API,
however this impedes supporting the touchpad's gesture detection. I found some old messages
in the list proposing a touch API but it was then recommended to use the sensor API. This is indeed
possible but it would require extending LVGL integration layer (besides adding some standard
channel types for gestures and taps, etc).

What is preferable at this point?

Best,
Matias


Activate shell over uart

Jacob Avraham
 

Hi,
I'm trying to enable the shell subsystem over the uart console on my board with no luck.
I built the samples/subsys/shell/shell_module/ application and added some printk() to it just to see that the console is working, and indeed the printk works.
I don't get any prompt, or any other interaction with the console.
Any idea what am I doing wrong?In general, I'm trying to understand how the shell works. Is it running as a separate thread along side with my application thread?
Is it running in kernel mode, or userspace?
Your insight is appreciated.
-Jacob


Building ESP32 WiFi sample

Matias N.
 

Hi,
I'm starting to test Zephyr (v2.6) for support of ESP32 features (interested in WiFi and BLE). Right now
I'm looking at trying out wifi. I managed to build and flash the hello world sample successfully and
now I was trying the "wifi" sample (I'm not sure if that is supposed to be work as I understand ESP32 WiFi
is a recent addition).

I enabled ESP32 WIFI SoC support in menuconfig and then it failed to build since it seems ethernet support
needs to be on. After enabling that I got quite a few more errors which I'm not sure how to address:

In file included from /home/v01d/coding/zephyr/modules/hal/espressif/components/wpa_supplicant/src/crypto/crypto_mbedtls-ec.c:17:
/home/v01d/coding/zephyr/modules/hal/espressif/components/wpa_supplicant/src/crypto/crypto_mbedtls-ec.c: In function 'crypto_ec_point_add':
/home/v01d/coding/zephyr/modules/hal/espressif/components/wpa_supplicant/src/crypto/crypto_mbedtls-ec.c:246:18: warning: implicit declaration of function 'mbedtls_ecp_muladd'; did you mean 'mbedtls_ecp_mul'? [-Wimplicit-function-declaration]
  MBEDTLS_MPI_CHK(mbedtls_ecp_muladd(&e->group, (mbedtls_ecp_point *) c, &one, (const mbedtls_ecp_point *)a , &one, (const mbedtls_ecp_point *)b));
                  ^~~~~~~~~~~~~~~~~~
/home/v01d/coding/zephyr/modules/crypto/mbedtls/mbedtls/include/mbedtls/bignum.h:50:22: note: in definition of macro 'MBEDTLS_MPI_CHK'
         if( ( ret = (f) ) != 0 ) \
                      ^
/home/v01d/coding/zephyr/modules/hal/espressif/components/wpa_supplicant/src/crypto/crypto_mbedtls-ec.c: In function 'crypto_ec_set_pubkey_point':
/home/v01d/coding/zephyr/modules/hal/espressif/components/wpa_supplicant/src/crypto/crypto_mbedtls-ec.c:532:20: warning: implicit declaration of function 'mbedtls_pk_ec'; did you mean 'mbedtls_pk_free'? [-Wimplicit-function-declaration]
  mbedtls_ecp_copy(&mbedtls_pk_ec(*key)->Q, point);
                    ^~~~~~~~~~~~~
                    mbedtls_pk_free
/home/v01d/coding/zephyr/modules/hal/espressif/components/wpa_supplicant/src/crypto/crypto_mbedtls-ec.c:532:39: error: invalid type argument of '->' (have 'int')
  mbedtls_ecp_copy(&mbedtls_pk_ec(*key)->Q, point);
                                       ^~
/home/v01d/coding/zephyr/modules/hal/espressif/components/wpa_supplicant/src/crypto/crypto_mbedtls-ec.c:533:45: error: invalid type argument of '->' (have 'int')
  mbedtls_ecp_group_load(&mbedtls_pk_ec(*key)->grp, MBEDTLS_ECP_DP_SECP256R1);
                                             ^~
/home/v01d/coding/zephyr/modules/hal/espressif/components/wpa_supplicant/src/crypto/crypto_mbedtls-ec.c: In function 'crypto_ec_get_public_key':
/home/v01d/coding/zephyr/modules/hal/espressif/components/wpa_supplicant/src/crypto/crypto_mbedtls-ec.c:560:56: error: invalid type argument of '->' (have 'int')
  return (struct crypto_ec_point *)&mbedtls_pk_ec(*pkey)->Q;
                                                        ^~
/home/v01d/coding/zephyr/modules/hal/espressif/components/wpa_supplicant/src/crypto/crypto_mbedtls-ec.c: In function 'crypto_ec_get_group_from_key':
/home/v01d/coding/zephyr/modules/hal/espressif/components/wpa_supplicant/src/crypto/crypto_mbedtls-ec.c:588:57: error: invalid type argument of '->' (have 'int')
  return (struct crypto_ec_group *)&(mbedtls_pk_ec(*pkey)->grp);
                                                         ^~
/home/v01d/coding/zephyr/modules/hal/espressif/components/wpa_supplicant/src/crypto/crypto_mbedtls-ec.c: In function 'crypto_ec_get_private_key':
/home/v01d/coding/zephyr/modules/hal/espressif/components/wpa_supplicant/src/crypto/crypto_mbedtls-ec.c:595:56: error: invalid type argument of '->' (have 'int')
  return ((struct crypto_bignum *)&(mbedtls_pk_ec(*pkey)->d));
                                                        ^~
/home/v01d/coding/zephyr/modules/hal/espressif/components/wpa_supplicant/src/crypto/crypto_mbedtls-ec.c: In function 'crypto_ecdh':
/home/v01d/coding/zephyr/modules/hal/espressif/components/wpa_supplicant/src/crypto/crypto_mbedtls-ec.c:715:35: warning: passing argument 2 of 'mbedtls_ecdh_get_params' makes pointer from integer without a cast [-Wint-conversion]
  if (mbedtls_ecdh_get_params(ctx, mbedtls_pk_ec(*own), MBEDTLS_ECDH_OURS) < 0) {
                                   ^~~~~~~~~~~~~~~~~~~
In file included from /home/v01d/coding/zephyr/modules/hal/espressif/components/wpa_supplicant/src/crypto/crypto_mbedtls-ec.c:32:
/home/v01d/coding/zephyr/modules/crypto/mbedtls/mbedtls/include/mbedtls/ecdh.h:335:57: note: expected 'const mbedtls_ecp_keypair *' {aka 'const struct mbedtls_ecp_keypair *'} but argument is of type 'int'
                              const mbedtls_ecp_keypair *key,
                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~
/home/v01d/coding/zephyr/modules/hal/espressif/components/wpa_supplicant/src/crypto/crypto_mbedtls-ec.c:724:35: warning: passing argument 2 of 'mbedtls_ecdh_get_params' makes pointer from integer without a cast [-Wint-conversion]
  if (mbedtls_ecdh_get_params(ctx, mbedtls_pk_ec(*peer), MBEDTLS_ECDH_THEIRS) < 0) {
                                   ^~~~~~~~~~~~~~~~~~~~
In file included from /home/v01d/coding/zephyr/modules/hal/espressif/components/wpa_supplicant/src/crypto/crypto_mbedtls-ec.c:32:
/home/v01d/coding/zephyr/modules/crypto/mbedtls/mbedtls/include/mbedtls/ecdh.h:335:57: note: expected 'const mbedtls_ecp_keypair *' {aka 'const struct mbedtls_ecp_keypair *'} but argument is of type 'int'
                              const mbedtls_ecp_keypair *key,
                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~
/home/v01d/coding/zephyr/modules/hal/espressif/components/wpa_supplicant/src/crypto/crypto_mbedtls-ec.c: In function 'crypto_ecdsa_get_sign':
/home/v01d/coding/zephyr/modules/hal/espressif/components/wpa_supplicant/src/crypto/crypto_mbedtls-ec.c:754:2: error: unknown type name 'mbedtls_ecdsa_context'; did you mean 'mbedtls_ecdh_context'?
  mbedtls_ecdsa_context *ctx = os_malloc(sizeof(*ctx));
  ^~~~~~~~~~~~~~~~~~~~~
  mbedtls_ecdh_context
/home/v01d/coding/zephyr/modules/hal/espressif/components/wpa_supplicant/src/crypto/crypto_mbedtls-ec.c:759:2: warning: implicit declaration of function 'mbedtls_ecdsa_init'; did you mean 'mbedtls_ecdh_init'? [-Wimplicit-function-declaration]
  mbedtls_ecdsa_init(ctx);
  ^~~~~~~~~~~~~~~~~~
  mbedtls_ecdh_init
/home/v01d/coding/zephyr/modules/hal/espressif/components/wpa_supplicant/src/crypto/crypto_mbedtls-ec.c:761:6: warning: implicit declaration of function 'mbedtls_ecdsa_from_keypair'; did you mean 'mbedtls_ecp_gen_keypair'? [-Wimplicit-function-declaration]
  if (mbedtls_ecdsa_from_keypair(ctx, mbedtls_pk_ec(*pkey)) < 0) {
      ^~~~~~~~~~~~~~~~~~~~~~~~~~
      mbedtls_ecp_gen_keypair
/home/v01d/coding/zephyr/modules/hal/espressif/components/wpa_supplicant/src/crypto/crypto_mbedtls-ec.c:764:8: warning: implicit declaration of function 'mbedtls_ecdsa_sign'; did you mean 'mbedtls_pk_sign'? [-Wimplicit-function-declaration]
  ret = mbedtls_ecdsa_sign(&ctx->grp, (mbedtls_mpi *)r, (mbedtls_mpi *)s,
        ^~~~~~~~~~~~~~~~~~
        mbedtls_pk_sign
/home/v01d/coding/zephyr/modules/hal/espressif/components/wpa_supplicant/src/crypto/crypto_mbedtls-ec.c:764:31: error: request for member 'grp' in something not a structure or union
  ret = mbedtls_ecdsa_sign(&ctx->grp, (mbedtls_mpi *)r, (mbedtls_mpi *)s,
                               ^~
/home/v01d/coding/zephyr/modules/hal/espressif/components/wpa_supplicant/src/crypto/crypto_mbedtls-ec.c:765:8: error: request for member 'd' in something not a structure or union
    &ctx->d, hash, SHA256_MAC_LEN, crypto_rng_wrapper, NULL);
        ^~
/home/v01d/coding/zephyr/modules/hal/espressif/components/wpa_supplicant/src/crypto/crypto_mbedtls-ec.c:768:2: warning: implicit declaration of function 'mbedtls_ecdsa_free'; did you mean 'mbedtls_ecdh_free'? [-Wimplicit-function-declaration]
  mbedtls_ecdsa_free(ctx);
  ^~~~~~~~~~~~~~~~~~
  mbedtls_ecdh_free
/home/v01d/coding/zephyr/modules/hal/espressif/components/wpa_supplicant/src/crypto/crypto_mbedtls-ec.c: In function 'crypto_edcsa_sign_verify':
/home/v01d/coding/zephyr/modules/hal/espressif/components/wpa_supplicant/src/crypto/crypto_mbedtls-ec.c:780:2: error: unknown type name 'mbedtls_ecdsa_context'; did you mean 'mbedtls_ecdh_context'?
  mbedtls_ecdsa_context *ctx = os_malloc(sizeof(*ctx));
  ^~~~~~~~~~~~~~~~~~~~~
  mbedtls_ecdh_context
/home/v01d/coding/zephyr/modules/hal/espressif/components/wpa_supplicant/src/crypto/crypto_mbedtls-ec.c:790:12: warning: implicit declaration of function 'mbedtls_ecdsa_verify'; did you mean 'mbedtls_pk_verify'? [-Wimplicit-function-declaration]
  if((ret = mbedtls_ecdsa_verify(&ctx->grp, hash, hlen,
            ^~~~~~~~~~~~~~~~~~~~
            mbedtls_pk_verify
/home/v01d/coding/zephyr/modules/hal/espressif/components/wpa_supplicant/src/crypto/crypto_mbedtls-ec.c:790:37: error: request for member 'grp' in something not a structure or union
  if((ret = mbedtls_ecdsa_verify(&ctx->grp, hash, hlen,
                                     ^~
/home/v01d/coding/zephyr/modules/hal/espressif/components/wpa_supplicant/src/crypto/crypto_mbedtls-ec.c:791:10: error: request for member 'Q' in something not a structure or union
      &ctx->Q, (mbedtls_mpi *)r, (mbedtls_mpi *)s)) != 0){
          ^~
/home/v01d/coding/zephyr/modules/hal/espressif/components/wpa_supplicant/src/crypto/crypto_mbedtls-ec.c: In function 'crypto_ec_gen_keypair':
/home/v01d/coding/zephyr/modules/hal/espressif/components/wpa_supplicant/src/crypto/crypto_mbedtls-ec.c:855:48: warning: passing argument 2 of 'mbedtls_ecp_gen_key' makes pointer from integer without a cast [-Wint-conversion]
  mbedtls_ecp_gen_key(MBEDTLS_ECP_DP_SECP256R1, mbedtls_pk_ec(*kctx), //get this from argument
                                                ^~~~~~~~~~~~~~~~~~~~
In file included from /home/v01d/coding/zephyr/modules/hal/espressif/components/wpa_supplicant/src/crypto/crypto_mbedtls-ec.c:27:
/home/v01d/coding/zephyr/modules/crypto/mbedtls/mbedtls/include/mbedtls/ecp.h:1174:76: note: expected 'mbedtls_ecp_keypair *' {aka 'struct mbedtls_ecp_keypair *'} but argument is of type 'int'
int mbedtls_ecp_gen_key( mbedtls_ecp_group_id grp_id, mbedtls_ecp_keypair *key,
                                                       ~~~~~~~~~~~~~~~~~~~~~^~~
/home/v01d/coding/zephyr/modules/hal/espressif/components/wpa_supplicant/src/crypto/crypto_mbedtls-ec.c: In function 'pk_write_ec_param':
/home/v01d/coding/zephyr/modules/hal/espressif/components/wpa_supplicant/src/crypto/crypto_mbedtls-ec.c:878:14: warning: implicit declaration of function 'mbedtls_oid_get_oid_by_ec_grp'; did you mean 'mbedtls_oid_get_oid_by_pk_alg'? [-Wimplicit-function-declaration]
  if( ( ret = mbedtls_oid_get_oid_by_ec_grp( ec->grp.id, &oid, &oid_len ) ) != 0 )
              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
              mbedtls_oid_get_oid_by_pk_alg
In file included from /home/v01d/coding/zephyr/modules/hal/espressif/components/wpa_supplicant/src/crypto/crypto_mbedtls-ec.c:34:
/home/v01d/coding/zephyr/modules/hal/espressif/components/wpa_supplicant/src/crypto/crypto_mbedtls-ec.c: In function 'mbedtls_pk_write_pubkey_formatted':
/home/v01d/coding/zephyr/modules/hal/espressif/components/wpa_supplicant/src/crypto/crypto_mbedtls-ec.c:916:70: warning: passing argument 3 of 'pk_write_ec_pubkey_formatted' makes pointer from integer without a cast [-Wint-conversion]
   MBEDTLS_ASN1_CHK_ADD( len, pk_write_ec_pubkey_formatted( p, start, mbedtls_pk_ec( *key ), format ) );
                                                                      ^~~~~~~~~~~~~~~~~~~~~
/home/v01d/coding/zephyr/modules/crypto/mbedtls/mbedtls/include/mbedtls/asn1write.h:36:22: note: in definition of macro 'MBEDTLS_ASN1_CHK_ADD'
         if( ( ret = (f) ) < 0 )                         \
                      ^
/home/v01d/coding/zephyr/modules/hal/espressif/components/wpa_supplicant/src/crypto/crypto_mbedtls-ec.c:887:24: note: expected 'mbedtls_ecp_keypair *' {aka 'struct mbedtls_ecp_keypair *'} but argument is of type 'int'
   mbedtls_ecp_keypair *ec, int format )
   ~~~~~~~~~~~~~~~~~~~~~^~
In file included from /home/v01d/coding/zephyr/modules/hal/espressif/components/wpa_supplicant/src/crypto/crypto_mbedtls-ec.c:34:
/home/v01d/coding/zephyr/modules/hal/espressif/components/wpa_supplicant/src/crypto/crypto_mbedtls-ec.c: In function 'crypto_pk_write_formatted_pubkey_der':
/home/v01d/coding/zephyr/modules/hal/espressif/components/wpa_supplicant/src/crypto/crypto_mbedtls-ec.c:960:62: warning: passing argument 3 of 'pk_write_ec_param' makes pointer from integer without a cast [-Wint-conversion]
   MBEDTLS_ASN1_CHK_ADD( par_len, pk_write_ec_param( &c, buf, mbedtls_pk_ec( *key ) ) );
                                                              ^~~~~~~~~~~~~~~~~~~~~
/home/v01d/coding/zephyr/modules/crypto/mbedtls/mbedtls/include/mbedtls/asn1write.h:36:22: note: in definition of macro 'MBEDTLS_ASN1_CHK_ADD'
         if( ( ret = (f) ) < 0 )                         \
                      ^
/home/v01d/coding/zephyr/modules/hal/espressif/components/wpa_supplicant/src/crypto/crypto_mbedtls-ec.c:871:24: note: expected 'mbedtls_ecp_keypair *' {aka 'struct mbedtls_ecp_keypair *'} but argument is of type 'int'
   mbedtls_ecp_keypair *ec )
   ~~~~~~~~~~~~~~~~~~~~~^~
/home/v01d/coding/zephyr/modules/hal/espressif/components/wpa_supplicant/src/crypto/crypto_mbedtls-ec.c: In function 'crypto_ec_get_public_key':
/home/v01d/coding/zephyr/modules/hal/espressif/components/wpa_supplicant/src/crypto/crypto_mbedtls-ec.c:561:1: warning: control reaches end of non-void function [-Wreturn-type]
}
^
/home/v01d/coding/zephyr/modules/hal/espressif/components/wpa_supplicant/src/crypto/crypto_mbedtls-ec.c: In function 'crypto_ec_get_group_from_key':
/home/v01d/coding/zephyr/modules/hal/espressif/components/wpa_supplicant/src/crypto/crypto_mbedtls-ec.c:589:1: warning: control reaches end of non-void function [-Wreturn-type]
}
^
/home/v01d/coding/zephyr/modules/hal/espressif/components/wpa_supplicant/src/crypto/crypto_mbedtls-ec.c: In function 'crypto_ec_get_private_key':
/home/v01d/coding/zephyr/modules/hal/espressif/components/wpa_supplicant/src/crypto/crypto_mbedtls-ec.c:596:1: warning: control reaches end of non-void function [-Wreturn-type]
}
^
ninja: build stopped: subcommand failed.
FATAL ERROR: command exited with status 1: /usr/bin/cmake --build /home/v01d/coding/zephyr/zephyr/samples/net/wifi/build

Best,
Matias


Which IDE use for hifive1_revb+zephyr

jesse stone <fatalfeel@...>
 

https://docs.zephyrproject.org/latest/boards/riscv/hifive1_revb/doc/index.html

I want to use zephyr on hifive1_revb

Which Ide is recommend?



Re: Trying to jump in stm32l496 bootloader from application

Erwan Gouriou
 

Hi Philippe,

There could be multiple reasons, but we'd need reported errors to be able to help.
Also, maybe you can open a github discussion and provide details (errors, build  environment, ...)
for following up.

BR
Erwan



On Thu, 10 Jun 2021 at 22:24, Philippe O'Reilly <poreilly@...> wrote:

Hi,

 

I wrote a small application for the STM32L496 processor. The application simply jumps in the ROM bootloader of the CPU.

When I compile my application within STM32Cube IDE (version 1.6.0), it works properly.

When I compile it with zephyr, using west metatool, it does not work.

 

Here is the code of my application:

 

    void (*SysMemBootJump)(void);

    volatile uint32_t addr = 0x1FFF0000;

    HAL_RCC_DeInit();

    SysTick->CTRL = 0;

    SysTick->LOAD = 0;

    SysTick->VAL = 0;

    __HAL_RCC_SYSCFG_CLK_ENABLE();

 

    __disable_irq();

    SCB->VTOR=0;

 

    __HAL_SYSCFG_REMAPMEMORY_SYSTEMFLASH();

 

    SysMemBootJump = (void (*)(void)) (*((uint32_t *)(addr + 4)));

    __set_MSP(*(uint32_t *)addr);

 

    SysMemBootJump();

       while(1);

 

 

I can not find out what makes it fail on Zephyr. If I could get some help on that problem, I would really appreciate.

 

Thanks

Philippe O’Reilly

______


Trying to jump in stm32l496 bootloader from application

Philippe O'Reilly <poreilly@...>
 

Hi,

 

I wrote a small application for the STM32L496 processor. The application simply jumps in the ROM bootloader of the CPU.

When I compile my application within STM32Cube IDE (version 1.6.0), it works properly.

When I compile it with zephyr, using west metatool, it does not work.

 

Here is the code of my application:

 

    void (*SysMemBootJump)(void);

    volatile uint32_t addr = 0x1FFF0000;

    HAL_RCC_DeInit();

    SysTick->CTRL = 0;

    SysTick->LOAD = 0;

    SysTick->VAL = 0;

    __HAL_RCC_SYSCFG_CLK_ENABLE();

 

    __disable_irq();

    SCB->VTOR=0;

 

    __HAL_SYSCFG_REMAPMEMORY_SYSTEMFLASH();

 

    SysMemBootJump = (void (*)(void)) (*((uint32_t *)(addr + 4)));

    __set_MSP(*(uint32_t *)addr);

 

    SysMemBootJump();

       while(1);

 

 

I can not find out what makes it fail on Zephyr. If I could get some help on that problem, I would really appreciate.

 

Thanks

Philippe O’Reilly

______


stm32: PWM: Default all "st,prescaler" pwm property to 0

Erwan Gouriou
 

Hi all,

I'd like to inform STM32 PWM users that I'm pushing a change [1] to harmonize the default value of property "st,prescaler" to 0 for all pwm nodes on all (STM32) SoCs.

Benefit is to solve the current situation where default value is 0 or 10000 depending on the node and ease boards porting and application development.

This change will be hopefully integrated in the next Zephyr DV that will be released in October.

If you're relying on current '10000' default value, one way to avoid any surprise in a future rebase is to take it into account already today and overwriting your pwm nodes in board description or overlays with value 10000:

&timers1 {
status = "okay";

pwm1: pwm {
status = "okay";
st,prescaler = <10000>;
pinctrl-0 = <&tim1_ch1_pwm_pa8>;
};
};


Cheers
Erwan



Re: lsm6dsl full registers access #sensor #sst26

Lawrence King
 

At a high level, between the sensor driver you found in drivers/sensor/lsm6dsl and your program, Zephyr provides an interface layer that makes the calls to sensor_attr_set() reasonably independent of the sensor you are using. Here is a fragment of code (not complete) example of setting things up for a lsm9ds1, this is not the sensor you are using, but all of the general concepts are the same.

 

/*

*      imu.c - routines to run the imu (Inertial Measurement Unit)

*

* imu_init()                   - forks a process to deal with the imu

* imu_main()                   - the main-loop for the imu process

* imu_trigger_handler()        - interrupt handler for the imu and magnetometer

*

*/

 

/* Zephyr specific includes */

#include <zephyr.h>

#include <zephyr/types.h>

#include <logging/log.h>

#include <device.h>

#include <drivers/sensor.h>

 

/* Generic 'C' includes */

#include <stdio.h>

#include <stddef.h>

#include <string.h>

#include <ctype.h>

 

#ifndef TEST_ROUTINE

/* project specific includes */

#include "imu.h"

#include "crash.h"

#endif

 

LOG_MODULE_REGISTER(imu);

 

/* forward declaration */

static void imu_trigger_handler(struct device *dev, struct sensor_trigger *trig);

 

/* the thread for processing imu data */

static K_THREAD_STACK_DEFINE(imu_stack, 1024);

static struct k_thread imu_thread_data;

static struct device *lsm9ds1;

enum sample_t {

        MAGNETOMETER_SAMPLE, ACCELEROMETER_SAMPLE, GRYO_SAMPLE, TEMPERATURE_SAMPLE

};

 

static int imu_mag_trig_cnt;

static int imu_accel_trig_cnt;

static int imu_gyro_trig_cnt;

static struct sensor_value accel[3];

static struct sensor_value gyro[3];

static struct sensor_value magn[3];

#if defined(CONFIG_LSM9DS1_ENABLE_TEMP)

static struct sensor_value temp[1];

static int imu_temp_trig_cnt;

#endif

 

/* a fifo to pass sensor readings from the ISR to the main imu loop */

K_FIFO_DEFINE(sample_fifo);

 

/* a memory pool and support routines to throw sensor readings into */

struct imu_sample_t {

        sys_snode_t node;               /* for the FIFO roputines */

        struct k_mem_block block;       /* for the alloc and free */

        enum sample_t type;             /* what the sensor_values are */

        struct sensor_value value[3];   /* x,y,x , or just T */

};

 

#define FIFO_ELEM_MIN_SZ        sizeof(struct imu_sample_t)

#define FIFO_ELEM_MAX_SZ        sizeof(struct imu_sample_t)

#define FIFO_ELEM_COUNT         255

#define FIFO_ELEM_ALIGN         sizeof(unsigned int)

 

K_MEM_POOL_DEFINE(sample_pool, FIFO_ELEM_MIN_SZ, FIFO_ELEM_MAX_SZ,

                  FIFO_ELEM_COUNT, FIFO_ELEM_ALIGN);

 

static inline void imu_sample_free(struct imu_sample_t *smp)

{

        k_mem_pool_free(&smp->block);

}

 

static inline void imu_sample_put(struct imu_sample_t *smp)

{

        k_fifo_put(&sample_fifo, smp);

}

 

static inline struct imu_sample_t *imu_sample_get(void)

{

        return k_fifo_get(&sample_fifo, K_FOREVER);

}

 

static inline void imu_sample_flush(void)

{

        struct imu_sample_t *smp;

 

        do {

                smp = imu_sample_get();

                if (smp) {

                        imu_sample_free(smp);

                }

        } while (smp != NULL);

}

 

static inline struct imu_sample_t *imu_sample_alloc(void)

{

        int ret;

        struct imu_sample_t *smp;

        struct k_mem_block block;

 

        ret = k_mem_pool_alloc(&sample_pool, &block,

                               sizeof(struct imu_sample_t),

                               K_NO_WAIT);

        if (ret < 0) {

                LOG_ERR("APP sample allocation failed!");

                imu_sample_flush();

 

                ret = k_mem_pool_alloc(&sample_pool, &block,

                                       sizeof(struct imu_sample_t),

                                       K_NO_WAIT);

                if (ret < 0) {

                        LOG_ERR("APP sample memory corrupted.");

                        __ASSERT_NO_MSG(0);

                        return NULL;

                }

                return NULL;

        }

 

        smp = (struct imu_sample_t *)block.data;

        smp->block = block;

 

        return smp;

}

 

static inline float out_ev(struct sensor_value *val)

{

        return (val->val1 + (float)val->val2 / 1000000.0f);

}

 

void imu_test(void)

{

        int64_t sample[3], t;

 

        if (lsm9ds1 != NULL) {

                t = k_uptime_get();     /* number of ms uptime */

                sample[0] = accel[0].val1 * 1000000 + accel[0].val2;

                sample[1] = accel[1].val1 * 1000000 + accel[1].val2;

                sample[2] = accel[2].val1 * 1000000 + accel[2].val2;

 

                printf("LSM9DS1 sensor samples:\n");

                k_sleep(K_MSEC(10));

                printf("mag_trig_cnt=%d, accel_trig_cnt=%d, gyro_trig_cnt=%d\n",

                       imu_mag_trig_cnt,

                       imu_accel_trig_cnt,

                       imu_gyro_trig_cnt);

                printf("\t accelerometer interrupt rate %.3f interrupts/second\n", ((float)imu_accel_trig_cnt / (float)t) * 1000.0f);

 

                k_sleep(K_MSEC(10));

                /* lsm9ds1 accel */

                printf("accel (%f %f %f) m/s2\n", out_ev(&accel[0]),

                       out_ev(&accel[1]),

                       out_ev(&accel[2]));

 

                k_sleep(K_MSEC(10));

                /* lsm9ds1 gyro */

                printf("gyro (%f %f %f) dps\n", out_ev(&gyro[0]),

                       out_ev(&gyro[1]),

                       out_ev(&gyro[2]));

 

                k_sleep(K_MSEC(10));

                /* lsm9ds1 external magn */

                printf("magn (%f %f %f) gauss\n", out_ev(&magn[0]),

                       out_ev(&magn[1]),

                       out_ev(&magn[2]));

#if defined(CONFIG_LSM9DS1_ENABLE_TEMP)

                k_sleep(K_MSEC(10));

                /* lsm9ds1  temperature */

                printf("temperature (%f) degrees C\n", out_ev(&temp[0]));

#endif

#ifndef TEST_ROUTINE

                crash_test(sample);

#endif

        } else {

                printf("LSM9DS1 not available\n");

        }

}

 

void imu_init(void)

{

        struct sensor_value odr_attr;

 

        /* get a handle to the sensor */

        lsm9ds1 = device_get_binding(DT_LABEL(DT_INST(0, st_lsm9ds1)));

        if (lsm9ds1 == NULL) {

                printf("Could not get a handle to the %s device\n", DT_LABEL(DT_INST(0, st_lsm9ds1)));

                return;

        } else {

                printf("imu_dev %p name %s\n", lsm9ds1, DT_LABEL(DT_INST(0, st_lsm9ds1)));

 

                printf("setting up sensor channels.\n");

                /* set magnetometer sampling frequency to 2.5 Hz */

                odr_attr.val1 = 2;

                odr_attr.val2 = 500000;

                if (sensor_attr_set(lsm9ds1, SENSOR_CHAN_MAGN_XYZ,

                                    SENSOR_ATTR_SAMPLING_FREQUENCY, &odr_attr) < 0) {

                        printf("Cannot set sampling frequency for magnetometer.\n");

                }

                printf("mag sample rate set to 2.5Hz.\n");

 

                /* set accel sampling frequency to 59.5 Hz */

                odr_attr.val1 = 59;

                odr_attr.val2 = 500000;

                if (sensor_attr_set(lsm9ds1, SENSOR_CHAN_ACCEL_XYZ,

                                    SENSOR_ATTR_SAMPLING_FREQUENCY, &odr_attr) < 0) {

                      printf("Cannot set sampling frequency for accelerometer (as expected).\n");

                }

                /* set gyro sampling frequency to 59.5 Hz */

                if (sensor_attr_set(lsm9ds1, SENSOR_CHAN_GYRO_XYZ,

                                    SENSOR_ATTR_SAMPLING_FREQUENCY, &odr_attr) < 0) {

                        printf("Cannot set sampling frequency for gyro.\n");

                }

                printf("imu sample rate set to 59.5Hz.\n");

 

#ifdef CONFIG_LSM9DS1_TRIGGER

                struct sensor_trigger trig;

#if defined(CONFIG_LSM9DS1_MAG_DRDY_TRIGGER)

                trig.type = SENSOR_TRIG_DATA_READY;

                trig.chan = SENSOR_CHAN_MAGN_XYZ;

 

                if (sensor_trigger_set(lsm9ds1, &trig, imu_trigger_handler) != 0) {

                        printf("Could not set sensor type and channel for mag trigger\n");

               }

                printf("mag trigger handler attached\n");

#endif

#if defined(CONFIG_LSM9DS1_IMU_DRDY_TRIGGER)

                trig.type = SENSOR_TRIG_DATA_READY;

                trig.chan = SENSOR_CHAN_ACCEL_XYZ;

                if (sensor_trigger_set(lsm9ds1, &trig, imu_trigger_handler) != 0) {

                        printf("Could not set sensor type and channel for imu trigger\n");

                }

 

                trig.type = SENSOR_TRIG_DATA_READY;

                trig.chan = SENSOR_CHAN_GYRO_XYZ;

                if (sensor_trigger_set(lsm9ds1, &trig, imu_trigger_handler) != 0) {

                        printf("Could not set sensor type and channel for imu trigger\n");

                }

                printf("imu data ready handlers attached\n");

#endif

#if defined(CONFIG_LSM9DS1_ENABLE_TEMP)

                trig.type = SENSOR_TRIG_DATA_READY;

                trig.chan = SENSOR_CHAN_DIE_TEMP;

 

                if (sensor_trigger_set(lsm9ds1, &trig, imu_trigger_handler) != 0) {

                        printf("Could not set sensor type and channel for temp trigger\n");

                }

                printf("imu temperature handler attached\n");

#endif

 

#endif

                /* start the imu main task */

                k_thread_create(&imu_thread_data, imu_stack,

                                K_THREAD_STACK_SIZEOF(imu_stack),

                                (k_thread_entry_t)imu_main,

                                NULL, NULL, NULL, K_PRIO_COOP(9), 0, K_NO_WAIT);

                printf("done setting up sensor channels.\n");

        }

}

 

#if defined(CONFIG_LSM9DS1_MAG_DRDY_TRIGGER) || defined(CONFIG_LSM9DS1_IMU_DRDY_TRIGGER)

static void imu_trigger_handler(struct device *dev,

                                struct sensor_trigger *trig)

{

        struct imu_sample_t *sample;

        int rc;

 

        /* look at the trigger type to decide if this is accel,

         * gyro, or temp data, then get it, convert to eng units

         * and store it locally

         */

        if (trig->type == SENSOR_TRIG_DATA_READY) {

                switch (trig->chan) {

#if defined(CONFIG_LSM9DS1_MAG_DRDY_TRIGGER)

                case SENSOR_CHAN_MAGN_XYZ:

                        imu_mag_trig_cnt++;

                        sample = imu_sample_alloc();

                        if (sample == NULL) {

                                printf("imu_sample_alloc() failed\n");

                                break;

                        }

                        rc = sensor_sample_fetch_chan(dev, SENSOR_CHAN_MAGN_XYZ);

                        if (rc != 0) {

                                printf("sensor_sample_fetch_chan() failed\n");

                        }

                        rc = sensor_channel_get(dev, SENSOR_CHAN_MAGN_XYZ, sample->value);

                        /* rc = sensor_channel_get(dev, SENSOR_CHAN_MAGN_XYZ, magn); */

                        if (rc != 0) {

                                printf("sensor_channel_get() failed\n");

                        }

                        sample->type = MAGNETOMETER_SAMPLE;

                        imu_sample_put(sample);

                        /* printf("magnetometer sample pushed into fifo\n"); */

                        break;

#endif

#if defined(CONFIG_LSM9DS1_IMU_DRDY_TRIGGER)

                case SENSOR_CHAN_ACCEL_XYZ:

                        imu_accel_trig_cnt++;

                        sample = imu_sample_alloc();

                        if (sample == NULL) {

                                printf("imu_sample_alloc() failed\n");

                                break;

                        }

                        rc = sensor_sample_fetch_chan(dev, SENSOR_CHAN_ACCEL_XYZ);

                        if (rc != 0) {

                                printf("sensor_sample_fetch_chan() failed\n");

                        }

                        rc = sensor_channel_get(dev, SENSOR_CHAN_ACCEL_XYZ, sample->value);

                        /* rc = sensor_channel_get(dev, SENSOR_CHAN_ACCEL_XYZ, accel); */

                        if (rc != 0) {

                                printf("sensor_channel_get() failed\n");

                        }

                        sample->type = ACCELEROMETER_SAMPLE;

                        imu_sample_put(sample);

                        /* printf("accel sample pushed into fifo\n"); */

                        break;

                case SENSOR_CHAN_GYRO_XYZ:

                        imu_gyro_trig_cnt++;

                        sample = imu_sample_alloc();

                        if (sample == NULL) {

                                printf("imu_sample_alloc() failed\n");

                                break;

                        }

                        rc = sensor_sample_fetch_chan(dev, SENSOR_CHAN_GYRO_XYZ);

                        if (rc != 0) {

                                printf("sensor_sample_fetch_chan() failed\n");

                        }

                        rc = sensor_channel_get(dev, SENSOR_CHAN_GYRO_XYZ, sample->value);

                        /* rc = sensor_channel_get(dev, SENSOR_CHAN_GYRO_XYZ, gyro); */

                        if (rc != 0) {

                                printf("sensor_channel_get() failed\n");

                        }

                        sample->type = GRYO_SAMPLE;

                        imu_sample_put(sample);

                        /* printf("gyro sample pushed into fifo\n"); */

                        break;

#endif

#if defined(CONFIG_LSM9DS1_ENABLE_TEMP)

                case SENSOR_CHAN_DIE_TEMP:

                        imu_temp_trig_cnt++;

                        sample = imu_sample_alloc();

                        if (sample == NULL) {

                                printf("imu_sample_alloc() failed\n");

                                break;

                        }

                        rc = sensor_sample_fetch_chan(dev, SENSOR_CHAN_DIE_TEMP);

                        if (rc != 0) {

                                printf("sensor_sample_fetch_chan() failed\n");

                        }

                        rc = sensor_channel_get(dev, SENSOR_CHAN_DIE_TEMP, sample->value);

                        /* rc = sensor_channel_get(dev, SENSOR_CHAN_DIE_TEMP, temp); */

                        if (rc != 0) {

                                printf("sensor_channel_get() failed\n");

                        }

                        sample->type = TEMPERATURE_SAMPLE;

                        imu_sample_put(sample);

                        /* printf("temp sample pushed into fifo\n"); */

                        break;

#endif

                default:

                        break;

                }

                /* once we put a sample into the fifo, the kernel will wake up

                 * the main loop to process the sample */

        }

}

#endif

 

/**

*

* imu_main() - main loop for processing samples

*

**/

void imu_main(void)

{

        struct imu_sample_t *smp;

        int magn_cnt = 0, accel_cnt = 0, gyro_cnt = 0, temp_cnt = 0;

 

        if (lsm9ds1 != NULL) {

                printf("imu_main(): started\n");

                k_sleep(K_MSEC(1000));  /* wait for samples to arrive */

        /*      sensor_sample_fetch(lsm9ds1); */

                sensor_sample_fetch_chan(lsm9ds1, SENSOR_CHAN_DIE_TEMP);

                sensor_sample_fetch_chan(lsm9ds1, SENSOR_CHAN_GYRO_XYZ);

                sensor_sample_fetch_chan(lsm9ds1, SENSOR_CHAN_MAGN_XYZ);

                sensor_sample_fetch_chan(lsm9ds1, SENSOR_CHAN_ACCEL_XYZ);

        }

 

        while (1) {

                /* eat up all of the samples out of the fifo */

                if ( ((smp = imu_sample_get()) != NULL) && (lsm9ds1 != NULL) ) {

                        /* store latest sample in a place where the test routine can print it */

                        switch (smp->type) {

                        case MAGNETOMETER_SAMPLE:

                                magn_cnt++;

                                magn[0] = smp->value[0];

                                magn[1] = smp->value[1];

                                magn[2] = smp->value[2];

                                break;

                        case ACCELEROMETER_SAMPLE:

                                accel_cnt++;

                                accel[0] = smp->value[0];

                                accel[1] = smp->value[1];

                                accel[2] = smp->value[2];

#ifndef TEST_ROUTINE

                                crash_detect(&(smp->value[0]), &(smp->value[1]), &(smp->value[2]));

#endif

                                break;

                        case GRYO_SAMPLE:

                                gyro_cnt++;

                                gyro[0] = smp->value[0];

                                gyro[1] = smp->value[1];

                                gyro[2] = smp->value[2];

                                break;

#if defined(CONFIG_LSM9DS1_ENABLE_TEMP)

                        case TEMPERATURE_SAMPLE:

                                temp_cnt++;

                                temp[0] = smp->value[0];

                                break;

#endif

                        }

                        imu_sample_free(smp);

                } else {

                        /* no samples available, nap for a while.

                         * above we set the sample rate at 59.9Hz so waiting a

                         * 60th of a second is reasonable, of course since the

                         * imu_sample_get() routine waits until there is

                         * something in the fifo, this should never happen */

                        k_sleep(K_MSEC(1000 / 60));

                }

        }

}

 

 

 

 

 

 

Lawrence King

Principal Developer

+1(416)627-7302

 

From: users@... <users@...> On Behalf Of DKaplan@...
Sent: Wednesday, June 9, 2021 5:22 AM
To: users@...
Subject: [Zephyr-users] lsm6dsl full registers access #sensor #sst26

 

Shalom!
 We are building a custom prototype Nordic nRF9160 board with the lsm6dsl spi chip in parallel on the same spi channel as the MX25R6435F flash memory chip.
I am new to Zephyr and mostly have programmed without any RTOS directly, bare metal, accessing the devices.
I need to program (and read) most all of the lsm6dsl's registers including reading the lsm6dsl's fifo before it overflows.
I understand that in the lsm6dsl sample that the sensor wrapper is used along with interrupts for motion detection.
We do not need any motion detection but just to take acceleration readings for a period of a several seconds.
Since the acceleration readings are at a know frequency ad the fifo size is constant, we do not have to use an interrupt by using a FIFO threshold, but by constantly emptying the FIFO.
I have code that works well using a Silabs mico-controller.
I looked at the sensors/lsm6dsl files including lsm6dsl_spi.c which seems to have basic read and write register static functionality but I do not know how this is reflected (or mapped) to the high level sensor functions like sensor_attr_set() sensor_attr_get() sensor_sample_fetch_chan() & sensor_channel_get().
Also I do not see how to specify each chip select for devices on the same SPI bus.
I am new to the prj.conf, Kconfig, CMakeLists.txt & .overlay files.
I created an overlay file and based on what I saw added the following:

&spi3 {

    status = "okay";

    sck-pin = <13>;

    mosi-pin = <11>;

    miso-pin = <12>;

    cs-gpios = <&gpio0 25 GPIO_ACTIVE_LOW>;

    /* ST Microelectronics LSM6DSL accel/gyro sensor */

    lsm6dsl@1 {

        compatible = "st,lsm6dsl";

        reg = <1>;

        spi-max-frequency = <1000000>;

        irq-gpios = <&gpio0 1 GPIO_ACTIVE_HIGH>;

        label = "LSM6DSL_SPI";

    };

    mx25r64: mx25r6435f@0 {

        compatible = "jedec,spi-nor";

        reg = <0>;

        spi-max-frequency = <8000000>;

        label = "MX25R64";

        jedec-id = [c2 28 17];

        sfdp-bfp = [

            e5 20 f1 ff  ff ff ff 03  44 eb 08 6b  08 3b 04 bb

            ee ff ff ff  ff ff 00 ff  ff ff 00 ff  0c 20 0f 52

            10 d8 00 ff  23 72 f5 00  82 ed 04 cc  44 83 68 44

            30 b0 30 b0  f7 c4 d5 5c  00 be 29 ff  f0 d0 ff ff

        ];

        size = <67108864>;

        has-dpd;

        t-enter-dpd = <10000>;

        t-exit-dpd = <35000>;

    };

};


We also have a 24LC512 EEPROM and a SI7050 temperature chip on the same I2C line, so the answer on how to specify their individual cs may be the same.
So basically I am asking:
 1) How do I map the high end sensor functions to the lower end spi functions?
 2) How do I differentiate between their cs lines?
 
If anyone can help or has a Zephyr example with the lsm6dsl , 24LC512 or the SI7050 let me know.
Thanks
 David


lsm6dsl full registers access #sensor #sst26

David Kaplan
 

Shalom!
 We are building a custom prototype Nordic nRF9160 board with the lsm6dsl spi chip in parallel on the same spi channel as the MX25R6435F flash memory chip.
I am new to Zephyr and mostly have programmed without any RTOS directly, bare metal, accessing the devices.
I need to program (and read) most all of the lsm6dsl's registers including reading the lsm6dsl's fifo before it overflows.
I understand that in the lsm6dsl sample that the sensor wrapper is used along with interrupts for motion detection.
We do not need any motion detection but just to take acceleration readings for a period of a several seconds.
Since the acceleration readings are at a know frequency ad the fifo size is constant, we do not have to use an interrupt by using a FIFO threshold, but by constantly emptying the FIFO.
I have code that works well using a Silabs mico-controller.
I looked at the sensors/lsm6dsl files including lsm6dsl_spi.c which seems to have basic read and write register static functionality but I do not know how this is reflected (or mapped) to the high level sensor functions like sensor_attr_set() sensor_attr_get() sensor_sample_fetch_chan() & sensor_channel_get().
Also I do not see how to specify each chip select for devices on the same SPI bus.
I am new to the prj.conf, Kconfig, CMakeLists.txt & .overlay files.
I created an overlay file and based on what I saw added the following:
&spi3 {
    status = "okay";
    sck-pin = <13>;
    mosi-pin = <11>;
    miso-pin = <12>;
    cs-gpios = <&gpio0 25 GPIO_ACTIVE_LOW>;
    /* ST Microelectronics LSM6DSL accel/gyro sensor */
    lsm6dsl@1 {
        compatible = "st,lsm6dsl";
        reg = <1>;
        spi-max-frequency = <1000000>;
        irq-gpios = <&gpio0 1 GPIO_ACTIVE_HIGH>;
        label = "LSM6DSL_SPI";
    };
    mx25r64: mx25r6435f@0 {
        compatible = "jedec,spi-nor";
        reg = <0>;
        spi-max-frequency = <8000000>;
        label = "MX25R64";
        jedec-id = [c2 28 17];
        sfdp-bfp = [
            e5 20 f1 ff  ff ff ff 03  44 eb 08 6b  08 3b 04 bb
            ee ff ff ff  ff ff 00 ff  ff ff 00 ff  0c 20 0f 52
            10 d8 00 ff  23 72 f5 00  82 ed 04 cc  44 83 68 44
            30 b0 30 b0  f7 c4 d5 5c  00 be 29 ff  f0 d0 ff ff
        ];
        size = <67108864>;
        has-dpd;
        t-enter-dpd = <10000>;
        t-exit-dpd = <35000>;
    };
};

We also have a 24LC512 EEPROM and a SI7050 temperature chip on the same I2C line, so the answer on how to specify their individual cs may be the same.
So basically I am asking:
 1) How do I map the high end sensor functions to the lower end spi functions?
 2) How do I differentiate between their cs lines?
 
If anyone can help or has a Zephyr example with the lsm6dsl , 24LC512 or the SI7050 let me know.
Thanks
 David


Zephyr 2.6.0 released, merge window is now open.

Kumar Gala
 

Hi,

We are pleased to announce the release of Zephyr RTOS version 2.6.0!

Major enhancements with this release include:

Major enhancements with this release include:
* Logging subsystem overhauled
* Added support for 64-bit ARCv3
* Split ARM32 and ARM64, ARM64 is now a top-level architecture
* Added initial support for Arm v8.1-m and Cortex-M55
* Removed legacy TCP stack support which was deprecated in 2.4
* Tracing subsystem overhaul including expansion for tracing points and added support
for Percepio Tracealyzer
* Device runtime power management (PM), former IDLE runtime, was completely overhauled.
* Added an example standalone Zephyr application in its own Git repository:
https://github.com/zephyrproject-rtos/example-application

The detailed release notes can be found here:
https://github.com/zephyrproject-rtos/zephyr/releases/tag/zephyr-v2.6.0

The next release, v2.7.0, is scheduled for October 15th, 2021. We’ll select a release manager in the next few days. The merge window is now open!

Please remember for older PRs a rebase might be good to double check any new CI issues!!!

Thank you to everyone that contributed features, documentation, testing, infrastructure, and bug fixes!

- Kumar


Zephyr 2.6.0-rc3 tagged

Kumar Gala
 

Hi,
The third release candidate for Zephyr v2.6.0 has been tagged (v2.6.0-rc3).

The merge window for features and enhancements remains closed until v2.6.0 is released. The next release milestone is code freeze. The final release remains scheduled for 4 Jun.

The focus now should be shifted to testing and documentation of the release. If you are a maintainer, please provide release notes for the areas you are responsible for and any other contributions you might have submitted since the last release. Everyone is encouraged to contribute to the release notes. The draft release notes file can be found here:

https://github.com/zephyrproject-rtos/zephyr/blob/main/doc/releases/release-notes-2.6.rst

Additional features or enhancements for the v2.6.0 release require approval by the TSC.

Current bug counts are:

High: 0 (Target: 0)
Medium: 11 (Target: 20)
Low: 78 (Target: 50)

More information about bugs counts and real-time tracking of bug counts can be found here: https://testing.zephyrproject.org/issues/zephyrproject-rtos/zephyr/index.html

Testing Zephyr main branch during the stabilization period is also requested; please test the code base and file bug reports so they can be addressed before the release deadline.

All changes since 2.6.0-rc2 can be found here:
https://github.com/zephyrproject-rtos/zephyr/releases/tag/v2.6.0-rc3

More details about Zephyr releases can found on the pages below:
https://docs.zephyrproject.org/latest/development_process/release_process.html

You may continue to send Pull Requests for new features in order to gather feedback early or collaborate with others, but the release team would like to encourage everyone to focus on bugfixes and documentation improvements to the largest extent possible, so that we can release v2.6.0 on time and in the best shape possible. If you have a feature or enhancement you would like to submit to the TSC, please tag the Pull Request with the "TSC" label, make sure it is approved and passing CI, and attend the next TSC meeting.

Thanks,
Kumar


Zephyr OSDP

Bojan JOVANOVIC <bojanjov@...>
 

Hello, guys.

I recently discovered that you included example codes for OSDP Control Panel (CP) and Peripheral Devices (PDs). In NCS v1.5.1 that I am using (link), they can be fund under zephyr/samples/subsys/mgmt/osdp. The examples are imported and adapted for Zephyr environment from here

I would like to try OSDP Control Panel example and communicate with my OSDP keycard reader PD device (e.g. this one).

However, I am not sure how should I interconnect keycard reader with nRF52840 development kit. Would you be so kind helping me with the following:

  1. Do I need to have some RS-485 transceiver development kit (e.g. this) that will serve as a bridge between OSDP keycard and UART port of the nRF52840 development board? 
  2. Within the main() function of OSDP CP example, I can't find how did you set the device in CP mode with osdp_cp_setup() function (link). Can you point me to the place where it is done in example code?

Thank you very much for your time and efforts. Looking forward to reading from you. 

Cheers Beers

Bojan.


Re: Network forum agenda

Jukka Rissanen
 

Hi,

Sorry for late reply, but I am cancelling this telco today as there is
nothing in agenda.


Cheers,
Jukka

On Mon, 2021-05-31 at 13:25 +0300, Jukka Rissanen wrote:
Hi all,

There is a network forum meeting tomorrow Tue 1 June at 8AM PST /
17.00
CEST.

Currently the agenda is empty, so if there is anything network
related
topics you want to discuss, please let me know, otherwise I will
cancel
the meeting.

Live Agenda/Minutes:
https://docs.google.com/document/d/1qFsOpvbyLzhflJbbv4Vl__497pKHDoUCy9hjAveyCX0/edit?usp=sharing

Shared Folder:
https://drive.google.com/drive/folders/1j6d0FLeOjiMil1Ellb59AsfHdzuWdAAc?usp=sharing

___________________________________________________________
Join Microsoft Teams Meeting (
https://teams.microsoft.com/l/meetup-join/19%3ameeting_NDU5ODRkNzktZDBmNC00MDg5LWI2OWEtNzM0MGZjMDU0Yjgw%40thread.v2/0?context=%7b%22Tid%22%3a%22af0096d9-700c-411a-b795-b3dd7122bad2%22%2c%22Oid%22%3a%22841a7c92-7816-4faf-9887-5e334e88f6d8%22%7d
)
+1 321-558-6518 ( tel:+1 321-558-6518,,458216365# ) United States,
Orlando (Toll)
Conference ID: 458 216 365#
Local numbers (
https://dialin.teams.microsoft.com/325d775d-c910-441e-90d0-353ebaa56cdd?id=458216365
) | Reset PIN ( https://mysettings.lync.com/pstnconferencing ) |
Learn
more about Teams ( https://aka.ms/JoinTeamsMeeting ) | Meeting
options
(
https://teams.microsoft.com/meetingOptions/?organizerId=841a7c92-7816-4faf-9887-5e334e88f6d8&tenantId=af0096d9-700c-411a-b795-b3dd7122bad2&threadId=19_meeting_NDU5ODRkNzktZDBmNC00MDg5LWI2OWEtNzM0MGZjMDU0Yjgw@thread.v2&messageId=0&language=en-US
)


Cheers,
Jukka









Re: Arduino Nano 33 IOT 'west flash' failure

William Fish
 

Hi,
I have been seeing the same thing with the nano-33 Sense using windows. I had assumed it must be my set-up but this would indicate that there is an issue with serial output on the Nano boards.

Not sure where to start.

Billy..

101 - 120 of 2707