The CYBLE-012011 BLE modules uses digitally tuned trimmer caps on the xtal to be on frequency. The example projects leave you with values of 0x2d6a (8.2pF, 14.3 pF) which by my measurements is way off by +100 ppm. There is a KBA that tells you to make it 0xbcbc (17.8 pF, 17.8 pF) which by my measurements is off by +19 ppm. https://community.infineon.com/t5/Knowledge-Base-Articles/ECO-Capacitance-Trim-Values-for-EZ-BLE-Modules-KBA218990/ta-p/249311
I'm using the raw PPS off a locked GPS (not a GPSDO) to gate the 24 MHz and measure the frequency. I've got three brand new CYBLE-012011 on completely different layouts and they all measure exactly +19 ppm hot using the recommended 0xbcbc. I find that 0xd9d9 (20.7 pF, 20.7 pF) gets them right around 0 ppm. Even with jitter a locked GPS PPS should give you significantly less than 1 ppm error.
SInce the KBA is from 4 years ago was there a change in the xtal in the module? I notice that some other modules have a recommended 0xd0d0. In any case, 2 x 20 pF on a xtal seems like a lot to me.
Could someone with a calibrated frequency counter double-check my results?Show Less
I need to implement an additional I2S port on the PSoC-6, my PSoC has only a single I2S module.
I found few resources for UDB I2S, and I have a few questions:
What I am trying to do:
1- I need left and right interleaved (24-bits data, 64-bits word length) --> This makes up 8-bytes (UDB FIFO is only 4-bytes).
2- I need to stream 160-bytes at at time.
3- I can use DMA.
4- UDB FIFO is 4-bytes, interleaved between left and right.
5- UDB FIFO interrupts is for non-empty or overflow.
Given those conditions (interrupt, buffer size, data format):
1- How can I capture the 160-bytes, which interrupt to use ?
2- And, how can I figure out which byte is received (is it left or right and which byte within the 4-bytes it is).
I'm picking up a project and haven't used the Cypress PSOC parts before. I have two board variants with two different PSOC 4 BLE parts in them: CYBLE-224116-01 and CYBLE-224110-00. I have an iOS app I need to update to make FW upgrades to these units and it needs to be able to determine which part is being targeted.
My first round of research hasn't turned up how to retrieve a hardware version string from the unit. I suspect that it is stored as a default characteristic on FW images generated by PSOC creator...but I'm still very new. What's an easy what to do this?Show Less
Dear Team Cypress,
Can CY8C4125PVE-S422 , together with Motor driver, control Stepper Motor through SPI communication for micro-stepping?
Can CY8C4125PVE-S422 and motor driver be used to achieve microstepping control feature with SPI to Stepper Motor?
The datasheet for the part, CY8C4125PVE-S422 ,follows: https://www.cypress.com/file/429186/download
Thank you for your help.
Do you have any job boards as I loking for P SOC6 with Bluetooth experence in Australia or new zealand.
I have made schematic and have modified Tutorial videos to make sure hardware is Ok.
I need expernced progrmmer in PSOC creator 4.4 to finish project.Show Less
We are not able to set 'WEL' bit in Status Register 1, or even read back what is written in Memory. We are using a FPGA to interface with Serial Flash S25FL256S... . Below is the sequence of operations.
I am attaching some waveforms showing the operations. The file names of waveforms indicate the type of operation being performed. These waveforms are from Xilinx Vivado ILA. The signal names are mapped as below.
Below is some information about the operations shown in the waveforms.
1) Read JED ID & Issue WREN.jpg: This file shows that reading of JEDEC ID is working. After reading the ID, we are issuing 'WREN' Instruction to set the 'WEL' bit.
2) Erase Flash Array (P4E).jpg: Before writing we are erasing the sector at address 0x0.
3) Read Status register 1, RDSR1 .jpg: Reading Status Register 1, read back data is 0x0.
4) Page Program & Read Status Register.jpg: Write data to memory and read Status Register 1, read back data is still 0x0, WIP bit not set.
5) Read Status Register & Read Flash Array.jpg: Read status register and read data from memory. Status register is still 0x0 and data read from memory is all 0xFF. Four bytes were written and four bytes read back.
Did we miss anything from the datasheet? Are we doing something incorrectly? Please help!
Thank you so much.
Hi everyone. I have the following issue. I just installed the new version of IDE Modus Toolbox in 2.4.
After going through the entire installation procedure on my Linux Manjaro machine.
My sample applications compile fine, but when I do Debug or Program it throws the following error and does not allow me to program my PSoC6.
Could not determine GDB version after sending: /home/user/ModusToolbox/tools_2.4/gcc/bin/arm-none-eabi-gdb --version, response:
I want to emphasize that I had previously installed the Modus Toolbox 2.3 version and it was working fine
Can you guide me to solve this problem, please?Show Less
I would like to get the latest wl tool, documentation with description of corresponding wl tool APIs?
There's a https://github.com/murata-wireless/meta-murata-wireless where it is possible to obtain the software for 1MW on Embedded Artist iMX7ULP evaluation board. However I'd like to understand is this the latest wl tool and where I can find corresponding documentation?
I'm tring a real CAN comunication test on KIT_A2G_TC397_3V3_TFT board, the receive hardware is ValueCAN3, the KIT_A2G_TC397_3V3_TFT board send a CAN message and the ValueCAN3 receive it, but when I ran the code, and set ValueCAN3 the same baudrate, there is nothing received. The code as below:
IfxCan_Can_Config canConfig; /* CAN module configuration structure */
IfxCan_Can canModule; /* CAN module handle */
IfxCan_Can_Node can02Node; /* CAN source node handle data structure */
IfxCan_Can_NodeConfig canNodeConfig; /* CAN node configuration structure */
IfxCan_Filter canFilter; /* CAN filter configuration structure */
IfxCan_Message txMsg; /* Transmitted CAN message structure */
IfxCan_Message rxMsg; /* Received CAN message structure */
uint32 txData[MAXIMUM_CAN_DATA_PAYLOAD]; /* Transmitted CAN data array */
uint32 rxData[MAXIMUM_CAN_DATA_PAYLOAD]; /* Received CAN data array */
#define ISR_PRIORITY_CAN_TX 1
#define ISR_PRIORITY_CAN_RX 2
#define ISR_PRIORITY_CAN_BUSOFF 3
#define MODEL_CAN0_RAM 0xF0200000
#define NODE0_RAM_OFFSET 0x0
#define CAN_ID_FILTER 0x50
IFX_CONST IfxCan_Can_Pins Can02_Pins =
IFX_INTERRUPT(canIsrTxHandler, 0, ISR_PRIORITY_CAN_TX);
IFX_INTERRUPT(canIsrRxHandler, 0, ISR_PRIORITY_CAN_RX);
IFX_INTERRUPT(canIsrBusoffHandler, 0, ISR_PRIORITY_CAN_BUSOFF);
/* Clear the "Transmission Completed" interrupt flag */
/* Just to indicate that the CAN message has been transmitted by turning on LED1 */
/* Clear the "Message stored to Dedicated RX Buffer" interrupt flag */
/* Read the received CAN message */
IfxCan_Can_readMessage(&g_mcmcan.can02Node, &g_mcmcan.rxMsg, g_mcmcan.rxData);
/* Check if the received data matches with the transmitted one */
if( g_mcmcan.rxMsg.messageId == CAN_ID_FILTER )
/* Turn on the LED2 to indicate correctness of the received message */
boolean iState = IfxCpu_disableInterrupts();
g_mcmcan.canNodeConfig.busLoopbackEnabled = FALSE;
g_mcmcan.canNodeConfig.nodeId = IfxCan_NodeId_0;
g_mcmcan.canNodeConfig.clockSource = IfxCan_ClockSource_both;
g_mcmcan.canNodeConfig.frame.type = IfxCan_FrameType_transmitAndReceive;
g_mcmcan.canNodeConfig.frame.mode = IfxCan_FrameMode_standard;
g_mcmcan.canNodeConfig.txConfig.txMode = IfxCan_TxMode_dedicatedBuffers;
g_mcmcan.canNodeConfig.txConfig.dedicatedTxBuffersNumber = 16;
g_mcmcan.canNodeConfig.txConfig.txBufferDataFieldSize = IfxCan_DataFieldSize_8;
g_mcmcan.canNodeConfig.rxConfig.rxMode = IfxCan_RxMode_dedicatedBuffers;
g_mcmcan.canNodeConfig.rxConfig.rxBufferDataFieldSize = IfxCan_DataFieldSize_8;
g_mcmcan.canNodeConfig.filterConfig.messageIdLength = IfxCan_MessageIdLength_standard;
g_mcmcan.canNodeConfig.filterConfig.standardListSize = 10;
g_mcmcan.canNodeConfig.filterConfig.extendedListSize = 0;
// g_mcmcan.canNodeConfig.filterConfig.standardFilterForNonMatchingFrames = IfxCan_NonMatchingFrame_reject;
// g_mcmcan.canNodeConfig.filterConfig.extendedFilterForNonMatchingFrames = IfxCan_NonMatchingFrame_reject;
g_mcmcan.canNodeConfig.messageRAM.standardFilterListStartAddress = 0x100;
g_mcmcan.canNodeConfig.messageRAM.rxBuffersStartAddress = 0x200;
g_mcmcan.canNodeConfig.messageRAM.txBuffersStartAddress = 0x400;
g_mcmcan.canNodeConfig.messageRAM.baseAddress = MODEL_CAN0_RAM + NODE0_RAM_OFFSET;
g_mcmcan.canNodeConfig.baudRate.baudrate = 250000;
g_mcmcan.canNodeConfig.interruptConfig.transmissionCompletedEnabled = TRUE;
g_mcmcan.canNodeConfig.interruptConfig.traco.priority = ISR_PRIORITY_CAN_TX;
g_mcmcan.canNodeConfig.interruptConfig.traco.interruptLine = IfxCan_InterruptLine_0;
g_mcmcan.canNodeConfig.interruptConfig.traco.typeOfService = IfxSrc_Tos_cpu0;
g_mcmcan.canNodeConfig.interruptConfig.messageStoredToDedicatedRxBufferEnabled = TRUE;
g_mcmcan.canNodeConfig.interruptConfig.reint.priority = ISR_PRIORITY_CAN_RX;
g_mcmcan.canNodeConfig.interruptConfig.reint.interruptLine = IfxCan_InterruptLine_1;
g_mcmcan.canNodeConfig.interruptConfig.reint.typeOfService = IfxSrc_Tos_cpu0;
g_mcmcan.canNodeConfig.pins = &Can02_Pins;
g_mcmcan.canFilter.number = 1;
g_mcmcan.canFilter.elementConfiguration = IfxCan_FilterElementConfiguration_storeInRxBuffer;
g_mcmcan.canFilter.id1 = CAN_ID_FILTER;
g_mcmcan.canFilter.rxBufferOffset = IfxCan_RxBufferId_0;
g_mcmcan.txMsg.messageId = 0x60;
//g_mcmcan.txMsg.bufferNumber = 0;
g_mcmcan.txMsg.dataLengthCode = IfxCan_DataLengthCode_8;
g_mcmcan.txMsg.frameMode = IfxCan_FrameMode_standard;
g_mcmcan.txMsg.messageIdLength = IfxCan_MessageIdLength_standard;
/* Define the content of the data to be transmitted */
g_mcmcan.txData = 0x11223344;
g_mcmcan.txData = 0x55667788;
/* Send the CAN message with the previously defined TX message content */
while( IfxCan_Status_notSentBusy ==
IfxCan_Can_sendMessage(&g_mcmcan.can02Node, &g_mcmcan.txMsg, &g_mcmcan.txData) )
g_led1.port = &MODULE_P13;
g_led1.pinIndex = PIN0;
g_led1.mode = IfxPort_OutputIdx_general;
g_led1.padDriver = IfxPort_PadDriver_cmosAutomotiveSpeed1;
g_led2.port = &MODULE_P13;
g_led2.pinIndex = PIN1;
g_led2.mode = IfxPort_OutputIdx_general;
g_led2.padDriver = IfxPort_PadDriver_cmosAutomotiveSpeed1;
/* Initialize the pins connected to LEDs to level "HIGH", which keep the LEDs turned off as default state */
/* Set the pin input/output mode for both pins connected to the LEDs */
IfxPort_setPinModeOutput(g_led1.port, g_led1.pinIndex, IfxPort_OutputMode_pushPull, g_led1.mode);
IfxPort_setPinModeOutput(g_led2.port, g_led2.pinIndex, IfxPort_OutputMode_pushPull, g_led2.mode);
/* Set the pad driver mode for both pins connected to the LEDs */
IfxPort_setPinPadDriver(g_led1.port, g_led1.pinIndex, g_led1.padDriver);
IfxPort_setPinPadDriver(g_led2.port, g_led2.pinIndex, g_led2.padDriver);
uint32 a = 10000;
/* !!WATCHDOG0 AND SAFETY WATCHDOG ARE DISABLED HERE!!
* Enable the watchdogs and service them periodically if it is required
/* Wait for CPU sync event */
please help me find the wrong settings in my code.Show Less